Ho utilizzato il modello di Cassetto di navigazione presente in Android Studio. Nel layout della mia attività ho questo codice:Android modifica la larghezza del pannello del cassetto di navigazione a livello di programmazione
<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" />
cosa ho bisogno è di cambiare a livello di codice la larghezza del pannello. Credo che la zona diritto di cambiare è questo:
@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();
....
Ma io non riesco a capire come può raggiungere il mio obiettivo.
/* UPDATE */
L'icona del pannello cassetto non viene mostrato nella barra delle operazioni
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);
}
});
Questo è il metodo selectItem
private void selectItem(int position) {
mCurrentSelectedPosition = position;
if (mDrawerListView != null) {
mDrawerListView.setItemChecked(position, true);
}
if (mDrawerLayout != null) {
mDrawerLayout.closeDrawer(mFragmentContainerView);
}
....
grazie mille! Funziona! Io uso il tuo codice per impostare automaticamente la larghezza al massimo possibile. Dopo il primo clic su un oggetto, riutilizzo il codice per ridimensionare la larghezza a 240 dpi. Ma sfortunatamente rimuove l'icona del menu del cassetto nell'angolo in alto a sinistra della barra laterale ... Non so perché ... Come posso risolvere? È anche possibile aprire automaticamente il menu del cassetto e Disabilitare i movimenti di panoramica (e rendersene conto dopo il primo clic su un elemento) –
Correggo il problema dell'icona utilizzando resources.getDisplayMetrics(). WidthPixels-1 invece di resources.getDisplayMetrics(). widthPixels! quindi le mie restanti domande sono ora 2. È possibile aprire il pannello del cassetto in modo programmatico e disabilitare i movimenti di panoramica? Grazie :) –
Prego! Vedi la mia risposta di modifica :) –