Android-навигатор для переключения курсора вправо

Мое требование – вид картинки ниже. Мой навигационный ящик должен быть открыт с правой стороны. Я реализовал это. Мой навигационный ящик открывается справа налево. Но проблема заключается в том, что значок всегда находится на левой стороне. Как я могу установить значок переключения вправо. Я проверил следующий вопрос SO, но никто из них не помог.

Изменить изображение кнопки переключения Значок В навигационном ящике справа налево

Переключатель ящика в правом ящике

введите ссылку здесь

введите описание изображения здесь

Вот что я пробовал.

код для моего макета activity_main.xml

          

Код для моей деятельности

 public class MainActivity extends AppCompatActivity { private DrawerLayout drawerLayout; private Toolbar toolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); initNavigationDrawer(); } @TargetApi(Build.VERSION_CODES.M) public void initNavigationDrawer() { NavigationView navigationView = (NavigationView)findViewById(R.id.navigation_view); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { int id = menuItem.getItemId(); switch (id){ case R.id.home: Toast.makeText(getApplicationContext(),"Home",Toast.LENGTH_SHORT).show(); drawerLayout.closeDrawers(); break; case R.id.settings: Toast.makeText(getApplicationContext(),"Settings",Toast.LENGTH_SHORT).show(); break; case R.id.trash: Toast.makeText(getApplicationContext(),"Trash",Toast.LENGTH_SHORT).show(); drawerLayout.closeDrawers(); break; case R.id.logout: finish(); } return true; } }); drawerLayout = (DrawerLayout)findViewById(R.id.drawer); ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close){ @Override public void onDrawerClosed(View v){ super.onDrawerClosed(v); } @Override public void onDrawerOpened(View v) { super.onDrawerOpened(v); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item != null && item.getItemId() == android.R.id.home) { if (drawerLayout.isDrawerOpen(Gravity.RIGHT)) { drawerLayout.closeDrawer(Gravity.RIGHT); } else { drawerLayout.openDrawer(Gravity.RIGHT); } } return false; } }; drawerLayout.addDrawerListener(actionBarDrawerToggle); actionBarDrawerToggle.syncState(); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (drawerLayout.isDrawerOpen(Gravity.RIGHT)) { drawerLayout.closeDrawer(Gravity.RIGHT); } else { drawerLayout.openDrawer(Gravity.RIGHT); } } }); } } 

Заранее спасибо.

2 Solutions collect form web for “Android-навигатор для переключения курсора вправо”

Я написал class EndDrawerToggle для настройки, очень похожей на вашу, – DrawerLayout с DrawerLayout в конец ящиком View в AppCompatActivity с пользовательской Toolbar в качестве поддержки ActionBar .

 import android.app.Activity; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.graphics.drawable.DrawerArrowDrawable; import android.support.v7.widget.AppCompatImageButton; import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar.LayoutParams; import android.view.View; import android.view.View.OnClickListener; public class EndDrawerToggle implements DrawerLayout.DrawerListener { private DrawerLayout drawerLayout; private DrawerArrowDrawable arrowDrawable; private AppCompatImageButton toggleButton; private String openDrawerContentDesc; private String closeDrawerContentDesc; public EndDrawerToggle(Activity activity, DrawerLayout drawerLayout, Toolbar toolbar, int openDrawerContentDescRes, int closeDrawerContentDescRes) { this.drawerLayout = drawerLayout; this.openDrawerContentDesc = activity.getString(openDrawerContentDescRes); this.closeDrawerContentDesc = activity.getString(closeDrawerContentDescRes); arrowDrawable = new DrawerArrowDrawable(toolbar.getContext()); arrowDrawable.setDirection(DrawerArrowDrawable.ARROW_DIRECTION_END); toggleButton = new AppCompatImageButton(toolbar.getContext(), null, R.attr.toolbarNavigationButtonStyle); toolbar.addView(toggleButton, new LayoutParams(GravityCompat.END)); toggleButton.setImageDrawable(arrowDrawable); toggleButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { toggle(); } } ); } public void syncState() { if (drawerLayout.isDrawerOpen(GravityCompat.END)) { setPosition(1f); } else { setPosition(0f); } } public void toggle() { if (drawerLayout.isDrawerOpen(GravityCompat.END)) { drawerLayout.closeDrawer(GravityCompat.END); } else { drawerLayout.openDrawer(GravityCompat.END); } } public void setPosition(float position) { if (position == 1f) { arrowDrawable.setVerticalMirror(true); toggleButton.setContentDescription(closeDrawerContentDesc); } else if (position == 0f) { arrowDrawable.setVerticalMirror(false); toggleButton.setContentDescription(openDrawerContentDesc); } arrowDrawable.setProgress(position); } @Override public void onDrawerSlide(View drawerView, float slideOffset) { setPosition(Math.min(1f, Math.max(0, slideOffset))); } @Override public void onDrawerOpened(View drawerView) { setPosition(1f); } @Override public void onDrawerClosed(View drawerView) { setPosition(0f); } @Override public void onDrawerStateChanged(int newState) { } } 

Класс EndDrawerToggle является полной заменой ActionBarDrawerToggle в этом случае, поэтому вам не понадобится ни одна из настроек, которые у вас есть для этого. Все методы DrawerListener по-прежнему доступны для переопределения, но нет необходимости делать это для основных функций, так как EndDrawerToggle обрабатывает сам режим ящика. Аналогичным образом не нужно обращаться к переключателю, самостоятельно, так что вам не нужна навигационная система OnClickListener .

Просто DrawerListener экземпляр переключателя, добавьте его как DrawerListener и синхронизируйте его. Я бы рекомендовал синхронизировать переключатель в onPostCreate() , чтобы убедиться, что он синхронизируется правильно, например, после изменения ориентации.

 private EndDrawerToggle drawerToggle; ... public void initNavigationDrawer() { NavigationView navigationView = ... ... drawerLayout = (DrawerLayout)findViewById(R.id.drawer); drawerToggle = new EndDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close); drawerLayout.addDrawerListener(drawerToggle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } 

В вашем манифесте android добавьте эту строку:

 android:supportsRtl="true" 

к вашему приложению, например:

  

Затем в методе onCreate добавьте эту строку:

 getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL); 

ПРЕДУПРЕЖДЕНИЕ ::: Это работает только для SdkVersion 17+, поэтому, если ваше приложение нацелено на минимальный SDK, вам нужно будет создать собственное меню и переопределить метод OnCreateOptions (если нет другого способа, о котором я не знаю, безусловно, возможно).

https://developer.android.com/guide/topics/manifest/application-element.html#supportsrtl

Давайте будем гением компьютера.