Java 更改导航抽屉的颜色单击颜色

Java 更改导航抽屉的颜色单击颜色,java,android,android-layout,android-activity,android-fragments,Java,Android,Android Layout,Android Activity,Android Fragments,我想知道如何将导航抽屉的列表项单击颜色(如图中箭头所示)从蓝色更改为红色。 我的第二个问题是,我想添加一个徽标(图像),单击该徽标会将用户指向actionbar(顶栏)上的MainActivity活动,下面是调用ActionBarActivity的活动代码 public class MainActivity extends ActionBarActivity { private String[] mOptionMenu; private DrawerLayout mDraw

我想知道如何将导航抽屉的列表项单击颜色(如图中箭头所示)从蓝色更改为红色。

我的第二个问题是,我想添加一个徽标(图像),单击该徽标会将用户指向actionbar(顶栏)上的MainActivity活动,下面是调用ActionBarActivity的活动代码

public class MainActivity extends  ActionBarActivity {

    private String[] mOptionMenu;
    private DrawerLayout mDrawerLayout;
    private RelativeLayout mDrawerRelativeLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;

    private CharSequence mTitleSection;
    private CharSequence mTitleApp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        mOptionMenu = new String[] { "Opción 1", "Opción 2", "Opción 3" };
         mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
         mDrawerRelativeLayout = (RelativeLayout)
         findViewById(R.id.left_drawer);
         mDrawerList = (ListView) findViewById(R.id.list_view_drawer);
         mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
         mOptionMenu));

         mDrawerList.setOnItemClickListener(new OnItemClickListener() {
         @Override
         public void onItemClick(AdapterView<?> parent, View view,
         int position, long id) {

         Fragment fragment = null;

         switch (position) {
         case 0:
         fragment = new FirstFragment();
         break;
         case 1:
         fragment = new SecondFragment();
         break;
         case 2:
         fragment = new ThirdFragment();
         break;
         }

         FragmentManager fragmentManager = getSupportFragmentManager();

         fragmentManager.beginTransaction()
         .replace(R.id.content_frame, fragment).commit();

         mDrawerList.setItemChecked(position, true);

         mTitleSection = mOptionMenu[position];
         getSupportActionBar().setTitle(mTitleSection);

         mDrawerLayout.closeDrawer(mDrawerRelativeLayout);
         }
         });
         mDrawerList.setItemChecked(0, true);
         mTitleSection = getTitle();
         mTitleApp = getTitle();

         mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
         R.drawable.ic_drawer, R.string.drawer_open,
         R.string.drawer_close) {

         public void onDrawerClosed(View view) {
             getSupportActionBar().setTitle(mTitleSection);
         ActivityCompat.invalidateOptionsMenu(MainActivity.this);
         }

         public void onDrawerOpened(View drawerView) {
             getSupportActionBar().setTitle(mTitleSection);
         ActivityCompat.invalidateOptionsMenu(MainActivity.this);
         }
         };

         mDrawerLayout.setDrawerListener(mDrawerToggle);

         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
         getSupportActionBar().setHomeButtonEnabled(true);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main_activity_actions, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }

        switch (item.getItemId()) {
        case R.id.action_settings:
            Toast.makeText(this, "Settings", Toast.LENGTH_SHORT).show();
            ;
            break;
        default:
            return super.onOptionsItemSelected(item);
        }

        return true;
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }
}
公共类MainActivity扩展了ActionBarActivity{
私有字符串[]菜单;
私人抽屉布局mDrawerLayout;
私有相对性布局;
私有列表视图mDrawerList;
私有操作bardrawertoggle mDrawerToggle;
私有字符序列mtitlection;
私有字符序列mTitleApp;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mOptionMenu=新字符串[]{“Opción 1”、“Opción 2”、“Opción 3”};
mDrawerLayout=(抽屉布局)findViewById(R.id.抽屉布局);
mDrawerRelativeLayout=(相对长度)
findViewById(右id左抽屉);
mDrawerList=(ListView)findViewById(R.id.list\u view\u drawer);
mDrawerList.setAdapter(新的ArrayAdapter)(这是android.R.layout.simple\u list\u item\u 1,
(菜单);
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
片段=空;
开关(位置){
案例0:
fragment=新的FirstFragment();
打破
案例1:
fragment=新的SecondFragment();
打破
案例2:
片段=新的第三个片段();
打破
}
FragmentManager FragmentManager=getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame,fragment).commit();
mDrawerList.setItemChecked(位置,true);
mTitleSection=mOptionMenu[位置];
getSupportActionBar().setTitle(mTitleSection);
mDrawerLayout.closeDrawer(mDrawerRelativeLayout);
}
});
mDrawerList.setItemChecked(0,true);
mTitleSection=getTitle();
mTitleApp=getTitle();
mDrawerToggle=新操作BarDrawerToggle(此,mDrawerLayout,
R.drawable.ic_抽屉,R.string.drawer_抽屉打开,
右弦抽屉(U关闭){
公共无效onDrawerClosed(视图){
getSupportActionBar().setTitle(mTitleSection);
ActivityCompat.InvalidateOptions菜单(MainActivity.this);
}
打开图纸上的公共空白(视图抽屉视图){
getSupportActionBar().setTitle(mTitleSection);
ActivityCompat.InvalidateOptions菜单(MainActivity.this);
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.main\u activity\u actions,menu);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
如果(MDRAWERTOGLE.onOptionsItemSelected(项目)){
返回true;
}
开关(item.getItemId()){
案例R.id.action\u设置:
Toast.makeText(这是“设置”,Toast.LENGTH_SHORT).show();
;
打破
违约:
返回super.onOptionsItemSelected(项目);
}
返回true;
}
@凌驾
后期创建时受保护的空(捆绑包savedInstanceState){
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@凌驾
公共无效OnConfiguration已更改(配置newConfig){
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
}

提前感谢。

您可以使用选择器更改mDrawerList中按下状态的颜色。首先,在res/drawable/redbg.xml中创建一个红色实心可绘制形状(比如redbg)

<shape xmlns:android="http://schemas.android.com/apk/res/android">
     <solid android:color="@android:color/holo_red_dark"/>
</shape>

然后在res/drawable/listviewbg.xml中创建一个选择器,比如(listviewbg),如下所示

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/redbg"/>
</selector>

并将此bg应用于xml中的mDrawerList

<ListView
android:id="@+id/mDrawerList "
android:layout_width="match_parent"
android:layout_height="match_parent"
android:listSelector="@drawable/listviewbg"
/>

关于背景指示器的第一个问题。它在API级别11以上工作

导航\u list\u background.xml添加所需颜色

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_activated="true" android:drawable="@color/green" />
    <item android:state_selected="true" android:drawable="@color/green" />
    <item android:state_pressed="true" android:drawable="@color/light_blue" />
    <item android:state_focused="true" android:drawable="@color/light_blue" />
    <item android:drawable="@color/blue" />

</selector>
在按钮上单击Add for onclick

   Button button=(Button)findViewById(R.id.button);
    button.setOnClickListener(this);

    public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(v.getId())
    {
    case R.id.button:
    ActivityYouwantToOpen.onOpen(v);
        break;
        }
        }   

这是一篇很长的文章:p

使用可绘制的XML,您可以完成这个导航抽屉!=导航抽屉内的列表视图很抱歉没有回答您的第二个问题:(.请解释一下
   <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="?android:attr/activatedBackgroundIndicator"
        android:orientation="horizontal" >


        <TextView
            android:id="@+id/title"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="8"
            android:text="Option 1" />


    </LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/header_drawer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/drawermenu" />

        <TextView
            android:id="@+id/header_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="5dp"
            android:text="TEST"
            android:textStyle="bold" />
      <ImageView
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/button" />
    </LinearLayout>

    <View
        android:id="@+id/actionbarseperator"
        android:layout_width="match_parent"
        android:layout_height="3dp"
        android:background="@color/blue" />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <include layout="@layout/actionbar" />


    <--Your Layout-->
</LinearLayout>
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
   Button button=(Button)findViewById(R.id.button);
    button.setOnClickListener(this);

    public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(v.getId())
    {
    case R.id.button:
    ActivityYouwantToOpen.onOpen(v);
        break;
        }
        }