Как добавить значок с правой стороны в NavigationView - PullRequest
0 голосов
/ 26 декабря 2018

Я работаю над приложением Xamarin.android, где оно содержит макет Drawer с 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.

1 Ответ

0 голосов
/ 27 декабря 2018

Исходя из вашего описания, вы хотите поменять положение между просмотром текста и значком?Если это так, вы можете создать просмотр списка для достижения этого в NavigationView, как показано в следующем коде.

Это GIF демонстрации.

enter image description here

<?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;
    }
}
...