Я использовал шаблон навигационного ящика, представленный в Android Studio. В макете моей деятельности у меня есть этот следующий код:Android меняет ширину панели панели навигации программно
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:name="com.smedilepaolo.newsfeed.NavigationDrawer.NavigationDrawerFragment"
tools:layout="@layout/fragment_navigation_drawer" />
Что мне нужно программно изменить ширину панели. Я думаю, что правая зона, чтобы изменить это так:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news_feed);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getFragmentManager().findFragmentById(R.id.navigation_drawer);
mTitle = getTitle();
....
Но я не могу понять, как можно достичь своей цели.
/* UPDATE */
значок панели ящика не предъявляется в панели действий
mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
mDrawerListView.post(new Runnable() {
@Override
public void run() {
Resources resources = getResources();
float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 240, resources.getDisplayMetrics());
DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mDrawerListView.getLayoutParams();
params.width = (int) (width);
mDrawerListView.setLayoutParams(params);
}
});
selectItem(position);
}
});
mDrawerListView.post(new Runnable() {
@Override
public void run() {
Resources resources = getResources();
float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, resources.getDisplayMetrics().widthPixels-1, resources.getDisplayMetrics());
DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mDrawerListView.getLayoutParams();
params.width = (int) (width);
mDrawerListView.setLayoutParams(params);
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
mDrawerLayout.openDrawer(mFragmentContainerView);
}
});
Это метод SelectItem
private void selectItem(int position) {
mCurrentSelectedPosition = position;
if (mDrawerListView != null) {
mDrawerListView.setItemChecked(position, true);
}
if (mDrawerLayout != null) {
mDrawerLayout.closeDrawer(mFragmentContainerView);
}
....
Спасибо так много! оно работает! Я использую ваш код для автоматической установки ширины на максимальную возможную. После первого щелчка на элементе я повторно использую ваш код для изменения ширины до 240 дп. Но, к сожалению, он удаляет значок меню ящика в верхнем углу левого окна боковой панели ... Я не знаю, почему ... Как я могу исправить? Также возможно автоматическое открытие меню выдвижного ящика и Отключить жест жесткости (и использовать его после первого щелчка на элементе). –
Исправлена проблема с иконкой, используя resources.getDisplayMetrics(). WidthPixels-1 вместо resources.getDisplayMetrics(). widthPixels! , поэтому мои оставшиеся вопросы теперь 2. Возможно ли открыть панель ящика программно и отключить жесты? Спасибо :) –
Добро пожаловать! См. Мой ответ на редактирование :) –