Java 更改导航抽屉的颜色单击颜色
我想知道如何将导航抽屉的列表项单击颜色(如图中箭头所示)从蓝色更改为红色。 我的第二个问题是,我想添加一个徽标(图像),单击该徽标会将用户指向actionbar(顶栏)上的MainActivity活动,下面是调用ActionBarActivity的活动代码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
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;
}
}