2015-01-26 3 views
0

В моем проекте я бы установил пользовательский actionBar (с пользовательским макетом) после определенного действия. У меня есть эта простая Активность:Настройка Android настраиваемая панель действий

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 


public class MainActivity2 extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_activity2); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main_activity2, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_settings: 
      //apriImpostazioni(); 
      return true; 
     case R.id.information_item: 
      //apriInformazioni(); 
      return true; 
     case R.id.search_item: 
      apriBarraRicerca(); 
      System.out.println ("IL BOTTONE RICERCA E' PREMUTO"); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

private void apriBarraRicerca() { 
    getActionBar().setCustomView(getLayoutInflater().inflate(R.layout.search_layout, null)); 
} 

} 

Где "menu_main_activity2" это 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="zipangulu.myapplication.MainActivity2"> 
<item android:id="@+id/action_settings" android:title="@string/action_settings" 
    android:orderInCategory="100" app:showAsAction="never" /> 
<item android:id="@+id/information_item" 
    android:title="Info" 
    android:icon="@drawable/info" 
    android:orderInCategory="100" 
    app:showAsAction="always"/> 
<item android:id="@+id/search_item" 
    android:title="Search" 
    android:icon="@drawable/search_icon" 
    android:orderInCategory="100" 
    app:showAsAction="always"/> 
</menu> 

Я бы, нажав search_item на главном ActionBar, установить пользовательский ActionBar ти этого макета:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="wrap_content" 
android:background="#4584d3"> 

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:id="@+id/back_button" 
    android:background="@null" 
    android:src="@drawable/back_icon"/> 

<AutoCompleteTextView 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="6" 
    android:id="@+id/campo_ricerca"/> 

<Spinner 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="2" 
    android:spinnerMode="dropdown" 
    android:id="@+id/spinner_anno"/> 

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:src="@drawable/search_icon" 
    android:id="@+id/avvia_ricerca"/> 

</LinearLayout> 

Но во время выполнения у меня есть исключение NullPointerException в теле метода apriBarraRicerca..why? Как я могу исправить эту проблему?

EDIT: как было предложено, я заменил «getActionBar()» на «getSupportActionBar()», теперь у меня нет никакого исключения, но ничего не происходит.

EDIT2: Я добавил getSupportActionBar(). SetDisplayShowCustomEnabled (true); и теперь мой обычай ActionBar виден, но не как я хочу, смотреть на следующем рисунке: http://bit.ly/1Dc2kGg Бар виден, но вырезанные, и видны также элементы предыдущего ActionBar ..

+0

Вы используете 'ActionBarActivity'. Попробуйте 'getSupportActionBar' вместо' getActionBar() '. https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html – vinitius

+0

@vinitius делает, как вы предположили, я больше не исключение, но ничего не происходит:/ – quasiaffatto

+0

Добавьте 'getSupportActionBar(). setDisplayShowCustomEnabled (true); ' – vinitius

ответ

0

Вы можете попробовать сделать То же самое с android.support.v7.widget.ToolBar

Ваш макет, который вы можете заполнить, как вы хотите:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:background="#688A08" 
     android:layout_height="?attr/actionBarSize"> 
</android.support.v7.widget.Toolbar> 

вы должны изменить с ценностно> styles.xml:

<resources> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    </style> 
</resources> 

И в методе onCreate() вы делаете следующее:

Toolbar tb = (Toolbar)findViewById(R.id.top_bar); 
if(tb != null){ 
    setSupportActionBar(tb); 
} 

Надеется, что это помогает !!!

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