如何将图标添加到 NavigationView 的右侧
How to add the icon to the right side in the NavigationView
我正在开发 Xamarin.android 应用程序,其中包含带有 NavigationView 的抽屉布局。我需要将图标更改为右侧而不是 textView 的左侧。
这是我的布局代码:
<android.support.design.widget.NavigationView
android:id="@+id/questiontypes_nav_view"
android:layout_width="220dp"
android:ellipsize="end"
android:layout_below="@+id/navigation_drawer_top"
android:maxLines="1"
android:scrollbars="none"
android:layout_above="@+id/navigation_drawer_bottom"
android:nestedScrollingEnabled="true"
android:layoutDirection="ltr"
android:layout_height="match_parent"
app:theme="@style/NavigationDrawerStyle"
android:background="#031d2c"
android:fitsSystemWindows="true"
app:itemTextAppearance="?android:attr/textAppearanceSmall"
app:itemTextColor="@android:color/white"
app:itemBackground="@drawable/nav_item_drawable"
app:itemIconTint="@drawable/nav_item_drawable">
</android.support.design.widget.NavigationView>
有什么方法可以让图标在 NavigationView 的右侧。
根据您的描述,是否要在textview和icon之间切换位置?如果是这样,您可以像下面的代码一样在 NavigationView 中创建一个列表视图来实现它。
这是演示的 GIF。
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="220dp"
android:scrollbars="none"
android:nestedScrollingEnabled="true"
android:layoutDirection="ltr"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main">
<ListView
android:paddingTop="500px"
android:id="@+id/lst_menu_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
ListItem.axml(自定义菜单)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Ls_textview"
android:text="this is text"
android:textSize="15dp"
android:layout_marginRight="5dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="18dp"/>
<ImageView
android:layout_marginLeft="50dp"
android:layout_width="50dp"
android:layout_height="50dp"
android:id="@+id/Ls_ImageView"
android:src="@drawable/lcon"/>
</LinearLayout>
这是在OnCreate()
方法中。
ListView listView = FindViewById<ListView>(Resource.Id.lst_menu_items);
List<ListItem> listItems = new List<ListItem>();
listItems.Add(new ListItem(Resource.Drawable.lcon, "Title1"));
listItems.Add(new ListItem(Resource.Drawable.lcon, "Title2"));
listItems.Add(new ListItem(Resource.Drawable.lcon, "Title3"));
listItems.Add(new ListItem(Resource.Drawable.lcon, "Title4"));
MyAdapter myAdapter= new MyAdapter(listItems, this);
listView.Adapter = myAdapter;
listView.ItemClick += (s, e) =>
{
OnClick(e.Position);
};
您可以像下面的代码一样处理点击事件。
private void OnClick(int position)
{
position++;
if (position == 1)
{
Toast.MakeText(this, $"you click title" + position, ToastLength.Short).Show();
}
else if (position == 2)
{
Toast.MakeText(this, $"you click title" + position, ToastLength.Short).Show();
}
else if (position == 3)
{
Toast.MakeText(this, $"you click title" + position, ToastLength.Short).Show();
}
else if (position == 4)
{
Toast.MakeText(this, $"you click title" + position, ToastLength.Short).Show();
}
DrawerLayout drawer = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
drawer.CloseDrawer(GravityCompat.Start);
}
这是列表视图的适配器
public class ListItem {
public ListItem(int ImageSrc, string ItemName)
{
this.ImageSrc = ImageSrc;
this.ItemName = ItemName;
}
public int ImageSrc { get; set; }
public string ItemName { get; set; }
}
public class MyAdapter : BaseAdapter
{
List<ListItem> listItems;
Context context;
public MyAdapter(List<ListItem> listItems, Context context)
{
this.listItems = listItems;
this.context = context;
}
public override int Count => listItems.Count;
public override Java.Lang.Object GetItem(int position)
{
throw new NotImplementedException();
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
convertView = LayoutInflater.From(context).Inflate(Resource.Layout.ListItem, parent, false);
TextView textView = convertView.FindViewById<TextView>(Resource.Id.Ls_textview);
ImageView imageView = convertView.FindViewById<ImageView>(Resource.Id.Ls_ImageView);
//int id=Resource.Drawable.Capture;
textView.Text = listItems[position].ItemName;
imageView.SetImageResource(listItems[position].ImageSrc);
return convertView;
}
}
我正在开发 Xamarin.android 应用程序,其中包含带有 NavigationView 的抽屉布局。我需要将图标更改为右侧而不是 textView 的左侧。
这是我的布局代码:
<android.support.design.widget.NavigationView
android:id="@+id/questiontypes_nav_view"
android:layout_width="220dp"
android:ellipsize="end"
android:layout_below="@+id/navigation_drawer_top"
android:maxLines="1"
android:scrollbars="none"
android:layout_above="@+id/navigation_drawer_bottom"
android:nestedScrollingEnabled="true"
android:layoutDirection="ltr"
android:layout_height="match_parent"
app:theme="@style/NavigationDrawerStyle"
android:background="#031d2c"
android:fitsSystemWindows="true"
app:itemTextAppearance="?android:attr/textAppearanceSmall"
app:itemTextColor="@android:color/white"
app:itemBackground="@drawable/nav_item_drawable"
app:itemIconTint="@drawable/nav_item_drawable">
</android.support.design.widget.NavigationView>
有什么方法可以让图标在 NavigationView 的右侧。
根据您的描述,是否要在textview和icon之间切换位置?如果是这样,您可以像下面的代码一样在 NavigationView 中创建一个列表视图来实现它。
这是演示的 GIF。
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="220dp"
android:scrollbars="none"
android:nestedScrollingEnabled="true"
android:layoutDirection="ltr"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main">
<ListView
android:paddingTop="500px"
android:id="@+id/lst_menu_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
ListItem.axml(自定义菜单)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Ls_textview"
android:text="this is text"
android:textSize="15dp"
android:layout_marginRight="5dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="18dp"/>
<ImageView
android:layout_marginLeft="50dp"
android:layout_width="50dp"
android:layout_height="50dp"
android:id="@+id/Ls_ImageView"
android:src="@drawable/lcon"/>
</LinearLayout>
这是在OnCreate()
方法中。
ListView listView = FindViewById<ListView>(Resource.Id.lst_menu_items);
List<ListItem> listItems = new List<ListItem>();
listItems.Add(new ListItem(Resource.Drawable.lcon, "Title1"));
listItems.Add(new ListItem(Resource.Drawable.lcon, "Title2"));
listItems.Add(new ListItem(Resource.Drawable.lcon, "Title3"));
listItems.Add(new ListItem(Resource.Drawable.lcon, "Title4"));
MyAdapter myAdapter= new MyAdapter(listItems, this);
listView.Adapter = myAdapter;
listView.ItemClick += (s, e) =>
{
OnClick(e.Position);
};
您可以像下面的代码一样处理点击事件。
private void OnClick(int position)
{
position++;
if (position == 1)
{
Toast.MakeText(this, $"you click title" + position, ToastLength.Short).Show();
}
else if (position == 2)
{
Toast.MakeText(this, $"you click title" + position, ToastLength.Short).Show();
}
else if (position == 3)
{
Toast.MakeText(this, $"you click title" + position, ToastLength.Short).Show();
}
else if (position == 4)
{
Toast.MakeText(this, $"you click title" + position, ToastLength.Short).Show();
}
DrawerLayout drawer = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
drawer.CloseDrawer(GravityCompat.Start);
}
这是列表视图的适配器
public class ListItem {
public ListItem(int ImageSrc, string ItemName)
{
this.ImageSrc = ImageSrc;
this.ItemName = ItemName;
}
public int ImageSrc { get; set; }
public string ItemName { get; set; }
}
public class MyAdapter : BaseAdapter
{
List<ListItem> listItems;
Context context;
public MyAdapter(List<ListItem> listItems, Context context)
{
this.listItems = listItems;
this.context = context;
}
public override int Count => listItems.Count;
public override Java.Lang.Object GetItem(int position)
{
throw new NotImplementedException();
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
convertView = LayoutInflater.From(context).Inflate(Resource.Layout.ListItem, parent, false);
TextView textView = convertView.FindViewById<TextView>(Resource.Id.Ls_textview);
ImageView imageView = convertView.FindViewById<ImageView>(Resource.Id.Ls_ImageView);
//int id=Resource.Drawable.Capture;
textView.Text = listItems[position].ItemName;
imageView.SetImageResource(listItems[position].ImageSrc);
return convertView;
}
}