2015-03-12 7 views
1

Я создал свою деятельность XML через java, а также разместил навигационный ящик.Установить ActionBarDrawerToggle в центре панели инструментов или панели действий, Android?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mDrawerLayout = new DrawerLayout(getApplicationContext()); 
    mDrawerLayout.setLayoutParams(new DrawerLayout.LayoutParams(
      LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

    content_frame = new FrameLayout(getApplicationContext()); 
    content_frame.setLayoutParams(new FrameLayout.LayoutParams(
      LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
    content_layout = new LinearLayout(getApplicationContext()); 
    content_layout.setOrientation(LinearLayout.VERTICAL); 
    content_layout.setLayoutParams(new LinearLayout.LayoutParams(
      LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
    content_layout.setBackgroundColor(Color.parseColor("#FFFFFF"));; 
    tool = new Toolbar(getApplicationContext()); 
    LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(
      LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT); 
    tool.setLayoutParams(lp); 
    tool.setBackgroundColor(Color.parseColor("#00BBD3")); 
    setSupportActionBar(tool); 
    tool.setMinimumHeight(getSupportActionBar().getHeight()); 
    content_layout1 = new LinearLayout(getApplicationContext()); 

    content_layout1.setOrientation(LinearLayout.VERTICAL); 
    content_layout1.setLayoutParams(new DrawerLayout.LayoutParams(320, 
      LayoutParams.MATCH_PARENT, Gravity.START)); 
    t = new TextView(getApplicationContext()); 
    t.setTextColor(Color.BLACK); 
    t.setText("XYZ"); 

    ivBottom = new ImageView(getApplicationContext()); 

    LinearLayout.LayoutParams par = new LinearLayout.LayoutParams(50, 50); 
    par.gravity = Gravity.CENTER_HORIZONTAL; 
    ivBottom.setLayoutParams(par); 
    ivBottom.setBackgroundResource(R.drawable.ic_launcher); 
    mDrawerList = new ListView(getApplicationContext()); 
    mDrawerList.setLayoutParams(new LinearLayout.LayoutParams(
      LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
    content_layout1.setBackgroundColor(Color.BLACK); 
    content_layout.addView(tool); 
    content_layout.addView(t); 
    content_frame.addView(content_layout); 
    mDrawerLayout.addView(content_frame); 
    content_layout1.addView(mDrawerList); 
    content_layout1.addView(ivBottom); 
    mDrawerLayout.addView(content_layout1); 

    setContentView(mDrawerLayout); 

    // Set the adapter for the list view 
    mDrawerList.setAdapter(new SideAdapter(getApplicationContext(), 
      menuTitles, menuIcons)); 
    // Set the list's click listener 
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, tool, 
      R.string.action_settings, R.string.action_settings) { 

     /** Called when a drawer has settled in a completely closed state. */ 
     public void onDrawerClosed(View view) { 
      super.onDrawerClosed(view); 
      invalidateOptionsMenu(); // creates call to 
             // onPrepareOptionsMenu() 
     } 

     /** Called when a drawer has settled in a completely open state. */ 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      invalidateOptionsMenu(); // creates call to 
             // onPrepareOptionsMenu() 
     } 
    }; 

    // Set the drawer toggle as the DrawerListener 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 
} 

Если я ставлю высоту панели инструментов, чтобы обернуть содержимое это бар панель/действие я получаю

Как вы видите, я не получаю действие бар предпочтительную высоту. enter image description here

Теперь, если я держать высоту до 100 это бар панели/действия я получаю Как вы видите значок ActionBar тумблера не центр с содержанием

enter image description here

У меня есть 2 варианта :

  1. Либо размер панели инструментов поставляется по умолчанию размер
  2. Или сделать тумблер быть в центре

Я пробовал много вещей, но я до сих пор не могу понять это. Пожалуйста, помогите мне.

меню XML

<menu 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" 
tools:context="com.example.drawermenu.JavaDrawerActivity" > 

<item 
    android:id="@+id/action_settings" 
    android:orderInCategory="100" 
    android:title="@string/action_settings" 
    app:showAsAction="never"/> 

Java код меню

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 
@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    // If the nav drawer is open, hide action items related to the content 
    // view 
    // boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); 
    // menu.findItem(R.id.action_websearch).setVisible(!drawerOpen); 
    return super.onPrepareOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    if (mDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

Вы можете изменить par.gravity = Gravity.CENTER_HORIZONTAL; к par.gravity = Gravity.CENTER_VERTICAL; – Fahim

+0

не работает – WISHY

ответ

5

размер панели инструментов поставляется по умолчанию размер

Если средства по умолчанию Высота Action-Bar и вы используете встроенную тему, значение атрибута «android: actionBarSize» - это точно высота Action-Bar в текущей теме. Если вы хотите установить высоту в коде, сниппет следующим образом.

TypedValue tv = new TypedValue(); 
    if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) { 
     int actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics()); 
    } 

делают переключатель находится в центре

Насколько я знаю, не существует официальный способ изменить параметры макета на «тумблер Drawable», но вы можете сделать это с помощью следующий код (тест на Android 5.0 связующей 5, используют опорно-v7 Drawabletoggle и панель инструментов):

for (int i = 0; i < mToolbar.getChildCount(); i++) { 
     // make toggle drawable center-vertical, you can make each view alignment whatever you want 
     if (tool.getChildAt(i) instanceof ImageButton) { 
      Toolbar.LayoutParams lp = (Toolbar.LayoutParams) mToolbar.getChildAt(i).getLayoutParams(); 
      lp.gravity = Gravity.CENTER_VERTICAL; 
     } 
    } 

Таким образом, вы можете видеть, что это просто обычный способ установить раскладку тяготение зрения, то, что нужно знать, что e toggle drawable - ImageButton. Если вы хотите, чтобы каждый вид в Toobar был вертикально по вертикали, просто установите соответствующую макет-гравитацию. Повеселись!:)

+0

Спасибо. Это решает мою проблему. Вы спасатель жизни – WISHY

+0

В моем текущем меню настроек кода не появляется. Можете ли вы также помочь в этом? – WISHY

+0

@ Поймите, вы имеете в виду «Кнопки действий»? если это, пожалуйста, покажите соответствующий xml-файл? –

8

Еще более простой способ сделать это установить минимальную высоту на панели инструментов, так как по умолчанию он использует размер панели действий

android:minHeight="?android:attr/actionBarSize" 

так в вашей панели инструментов, если вы установите его в 100dp

<android.support.v7.widget.Toolbar 
    android:minHeight="100dp" 

Он выровняется по середине панели инструментов.

+1

Ничего себе, это намного лучший способ сделать это, гораздо более аккуратный! Благодарю. – Rich

+0

Спасибо, приятель. Отличный ответ. – kksal55

+0

сладкий и короткий :) –

Смежные вопросы