Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何实现类似Google Play Music的导航抽屉选择器_Android_Android Selector_Android Navigation - Fatal编程技术网

Android 如何实现类似Google Play Music的导航抽屉选择器

Android 如何实现类似Google Play Music的导航抽屉选择器,android,android-selector,android-navigation,Android,Android Selector,Android Navigation,我希望实现一个导航抽屉选择器,它在抽屉打开时始终显示当前选定的项目,即使在抽屉关闭时也会保留该选项。大概是这样的: 我使用过类似的东西,但它只在我单击列表项时显示选择器。这在我的res文件夹中: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pre

我希望实现一个导航抽屉选择器,它在抽屉打开时始终显示当前选定的项目,即使在抽屉关闭时也会保留该选项。大概是这样的:

我使用过类似的东西,但它只在我单击列表项时显示选择器。这在我的res文件夹中:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" 
        android:drawable="@drawable/list_activated_holo" />

</selector>


如何实现上述实现?需要实现哪个状态?谢谢

还有另一个状态,
“android:state\u selected”
,您必须使用它。在列表项的背景中使用可绘制状态,并在列表的listSelector中使用不同的可绘制状态:

list\u row\u layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:background="@drawable/listitem_background"
    >
...
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="@color/android:transparent" />
    <item android:drawable="@drawable/listitem_normal" />
</selector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/listitem_pressed" />
    <item android:state_focused="true" android:drawable="@drawable/listitem_selected" />
</selector>
listitem\u selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:background="@drawable/listitem_background"
    >
...
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="@color/android:transparent" />
    <item android:drawable="@drawable/listitem_normal" />
</selector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/listitem_pressed" />
    <item android:state_focused="true" android:drawable="@drawable/listitem_selected" />
</selector>

通过在填充NavigationDrawer中我的列表的ArrayAdapter的getView()中设置颜色,解决了相同的问题:

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        ViewHolder holder;

        if (convertView == null) {
            convertView = LayoutInflater.from(getActivity()).inflate(
                    R.layout.side_menu_list_item,
                    parent,
                    false);
            holder = new ViewHolder();
            holder.title = (TextView) convertView.findViewById(R.id.text1);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        if (mCurrentSelectedPosition == position) {
            holder.title.setBackgroundResource(R.color.menu_list_separator_line);
        } else {
            holder.title.setBackgroundResource(R.color.app_background_light);
        }
        holder.title.setText(menuItems[position]);

        return convertView;
    }

以下是您的答案:这是您为3项实现的
列表视图吗?请查看我的答案,它可能会对您有所帮助。因此,在这种情况下,灰色背景将位于列表项下。\u正常?那么按下并聚焦呢?现在我使用的是selected,它们还会被使用吗?不会,它只会用于所选项目。所以我根本不需要使用listitem_selector.xml?我对要使用的抽绳有点困惑。灰色表示所选项目的状态是否正确?是,表示所选项目。否。我仍然面临同样的问题。列表项未持续高亮显示此处定义的mcurrentselectedposition在哪里?它的用途是什么?mCurrentSelectedPosition-填充导航抽屉的是ListView当前选定项的int值。实现NavigationDrawer最简单的方法是使用Android Studio预定义的项目导航模板。