1

我正在尝试将一个TextView添加到适用于 android 的标准抽屉导航中。但我真的不知道如何使用它。这就是我到目前为止所拥有的。

<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">

    <!-- As the main content view, the view below consumes the entire
         space available using match_parent in both dimensions. -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 

    <LinearLayout
        android:layout_width="240dp"
        android:layout_height="match_parent" 
        android:gravity="left"
        >

        <TextView
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:text="Algemeen"
            android:background="@drawable/title_menu"
            android:textColor="#94A1A1"
            android:textAppearance="?android:attr/textAppearanceListItemSmall"
            android:minHeight="?android:attr/listPreferredItemHeightSmall"  
            android:layout_weight="1"  
            android:gravity="start"     
        />  

        <ListView
            android:id="@+id/left_drawer"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="#323232"
            android:layout_weight="1"
            android:gravity="start"
        />

    </LinearLayout>

</android.support.v4.widget.DrawerLayout>

我收到一个错误:No drawer view found with absolute gravity LEFT。有人可以帮助我吗?

4

2 回答 2

2

创建抽屉布局

要添加导航抽屉,请将您的用户界面与 aDrawerLayout 对象声明为布局的根视图。在 theDrawerLayout 中,添加一个包含屏幕主要内容的视图(抽屉隐藏时的主要布局)和另一个包含导航抽屉内容的视图。

<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">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#111"/>
</android.support.v4.widget.DrawerLayout>

此布局展示了一些重要的布局特征: 主内容视图(上面的 FrameLayout)必须是 DrawerLayout 中的第一个子视图,因为 XML 顺序意味着 z 排序,并且抽屉必须位于内容的顶部。主内容视图设置为匹配父视图的宽度和高度,因为它代表了隐藏导航抽屉时的整个 UI。抽屉视图(ListView)必须使用 android:layout_gravityattribute 指定其水平重力。要支持从右到左 (RTL) 语言,请使用“start”而不是“left”指定值(因此当布局为 RTL 时,抽屉会出现在右侧)。抽屉视图以 dp 为单位指定其宽度,高度与父视图匹配。抽屉宽度不应超过 320dp,以便用户始终可以看到主要内容的一部分。初始化抽屉列表和抽屉布局

首先,您必须初始化抽屉列表和抽屉布局。然后必须使用适配器设置列表视图的值。

mColors = getResources().getStringArray(R.array.colors_array);
mDrawerLayout=(DrawerLayout)findViewById(R.id.drawer_layout);
mDrawerList=(ListView)findViewById(R.id.left_drawer);

监听打开和关闭事件

要监听抽屉打开和关闭事件,请在 DrawerLayout 上调用 setDrawerListener() 并将 DrawerLayout.DrawerListener 的实现传递给它。该接口为抽屉事件提供回调,例如 onDrawerOpened() 和 onDrawerClosed()。

mDrawerToggle=new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close){
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};

处理导航点击事件

当用户在抽屉列表中选择一个项目时,系统会在给 setOnItemClickListener() 的 OnItemClickListener 上调用 onItemClick()。

public class DrawerItemClickListener implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
// TODO Auto-generated method stub
selectItem(position);
}
}
private void selectItem(int position){
Fragment fragment=new ColorsFragment();
Bundle bundle=new Bundle();
bundle.putInt("Position", position);
fragment.setArguments(bundle);
FragmentManager fragmentManager=getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
Toast.makeText(this, position+"", Toast.LENGTH_SHORT).show();
mDrawerList.setItemChecked(position, true);
setTitle(mPlanetTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}

在 selectItem() 中,您必须将相关片段调用到给定位置。在这里,我创建了简单的片段并根据给定输入更改背景颜色和文本。

public class ColorsFragment extends Fragment{
private int[] colors;
private int position;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootview=inflater.inflate(R.layout.fragment_layout, container,false);
position=getArguments().getInt("Position");
RelativeLayout layout=(RelativeLayout)rootview.findViewById(R.id.layout);
TextView textView=(TextView)rootview.findViewById(R.id.textview);
colors=getActivity().getResources().getIntArray(R.array.colors);
textView.setText(getResources().getStringArray(R.array.colors_array)[position]);
layout.setBackgroundColor(colors[position]);
return rootview;
}
}

使用 ActionBarDrawerToggle 时,必须在 onPostCreate() 和 onConfigurationChanged() 期间调用它

@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
mDrawerToggle.onConfigurationChanged(newConfig);
}

更多参考请访问:http: //velmuruganandroidcoding.blogspot.in/2014/09/navigation-drawer-in-android.html

于 2014-09-05T17:32:40.920 回答
1

我认为问题出在线性布局中的 android:gravity="left" 上。文档建议使用 layout_gravity="start" ,这应该可以满足您的要求。

于 2013-08-08T14:17:39.937 回答