您好我想在我的应用中创建带导航抽屉的自定义ActionBar。在那里我想显示在右侧的圆圈内登录我的应用程序的人的脸。和左侧的导航栏。
。
之前它没有用于导航抽屉。
答案 0 :(得分:10)
@Manikandan试一试:
您必须做的第一件事是实现并创建导航抽屉:
<强> /res/layout/activity_main.xml 强>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- menu-->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- slide menu -->
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#111"
android:choiceMode="singleChoice" />
</android.support.v4.widget.DrawerLayout>
<强> MainActivity.java 强>
public class MainActivity extends ActionBarActivity {
private String[] optionsMenu;
private DrawerLayout drawerLayout;
private ListView drawerList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
opcionesMenu = new String[] {"Option 1", "Option 2", "Option 3"};
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerList = (ListView) findViewById(R.id.left_drawer);
drawerList.setAdapter(new ArrayAdapter<String>(
getSupportActionBar().getThemedContext(),
android.R.layout.simple_list_item_1, optionssMenu));
}
//...
}
对于navigationDrawer菜单上的每个项目,您需要添加一个布局 和一个片段。
fragment_1.xml(或菜单上的其他项目,fragment_2,fragment_3 ....)
<?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" >
<TextView
android:id="@+id/TxtDetalle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/fragment1" />
</LinearLayout>
及其与每个FragmentLayout相关联的类
Fragment1.java(fragment2,Fragment3,Fragment4 ......)
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment1 extends Fragment {
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_1, container, false);
}
}
我们设置了与每个选项相关的菜单和片段 以下将实现响应事件菜单所需的逻辑 改变每个选项的片段形式。
这是通过实现onItemClick ListView事件菜单来完成的 控制,逻辑被添加到我们的onCreate()方法的末尾 核心业务。
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
drawerList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view,
int position, long id) {
Fragment fragment = null;
switch (position) {
case 1:
fragment = new Fragment1();
break;
case 2:
fragment = new Fragment2();
break;
case 3:
fragment = new Fragment3();
break;
}
FragmentManager fragmentManager =
getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();
drawerList.setItemChecked(position, true);
tituloSeccion = opcionesMenu[position];
getSupportActionBar().setTitle(tituloSeccion);
drawerLayout.closeDrawer(drawerList);
}
});
}
MainActivity上的好的,我们已经实现了基本功能,现在我想添加 打开和关闭图标。
。
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
tituloApp = getTitle();
drawerToggle = new ActionBarDrawerToggle(this,
drawerLayout,
R.drawable.ic_navigation_drawer,
R.string.drawer_open,
R.string.drawer_close) {
public void onDrawerClosed(View view) {
getSupportActionBar().setTitle(tituloSeccion);
ActivityCompat.invalidateOptionsMenu(MainActivity.this);
}
public void onDrawerOpened(View drawerView) {
getSupportActionBar().setTitle(tituloApp);
ActivityCompat.invalidateOptionsMenu(MainActivity.this);
}
};
drawerLayout.setDrawerListener(drawerToggle);
}
您的MainActivity上的现在我们要在ActionBar上添加按钮(在用户图像上)*
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
boolean menuAbierto = drawerLayout.isDrawerOpen(drawerList);
if(menuAbierto)
menu.findItem(R.id.action_search).setVisible(false);
else
menu.findItem(R.id.action_search).setVisible(true);
return super.onPrepareOptionsMenu(menu);
}
有了这个,我们满足了设计指南的大部分建议,但是 我们仍然允许用户通过单击应用程序打开 操作栏菜单中的图标。
为此,在onCreate()方法结束时将限定脉动 调用setDisplayHomeAsUpEnabled icon()和setHomeButtonEnabled(), 并添加事件onOptionsItemSelected()(负责处理 操作栏上的击键,初始调用 ActionBarDrawerToggle对象的onOptionsItemSelected方法() 在上面创建,所以如果它返回true(意味着谁管理了点击 应用程序图标)直接来自这种方法。
MainActivity
public void onCreate(Bundle savedInstanceState) {
//...
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
//...
}
最后完成添加此方法:
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
修改 所有项目:
https://github.com/sgolivernet/curso-android-src/tree/develop/android-navigationdrawer
答案 1 :(得分:4)
您可以将自定义视图添加到操作栏
final ActionBar actionBar = getActionBar();
actionBar.setCustomView(R.layout.actionbar_custom_view_home);
添加你的imageView和你想要的标题
答案 2 :(得分:1)
getSupportActionBar()setDisplayShowHomeEnabled(假)。 getSupportActionBar()setDisplayShowTitleEnabled(假);
LayoutInflater mInflater = LayoutInflater.from(this);
View mCustomView = mInflater.inflate(R.layout.custom_action_bar_back, null);
getSupportActionBar().setCustomView(mCustomView);
getSupportActionBar().setDisplayShowCustomEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);