2015-01-26 95 views
0

在我的项目中,我会设置一个自定义动作条(具有自定义布局)后的特定操作。 我有这个简单的活动: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,设置自定义动作条蒙山这个布局:

<?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> 

但是在运行时,我在“apriBarraRicerca”方法体内有一个NullPointerException ..为什么?我该如何解决这个问题?

编辑:建议我用“getSupportActionBar()”替换“getActionBar()”,现在我没有任何异常但没有任何反应。编辑2:我添加了getSupportActionBar()。setDisplayShowCustomEnabled(true);我添加了getSupportActionBar()。setDisplayShowCustomEnabled(true);现在我的自定义动作条是可见的,但不是我想要的,看看下面的图片: http://bit.ly/1Dc2kGg 酒吧是可见的,但板缺,而且也可见以前的动作条的项目..

+0

您正在使用'ActionBarActivity'。尝试'getSupportActionBar'而不是'getActionBar()'。 https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html – vinitius 2015-01-26 21:52:00

+0

@vinitius按照你的建议做,我不再有异常,但没有任何反应:/ – quasiaffatto 2015-01-26 21:58:04

+0

Add'getSupportActionBar()。setDisplayShowCustomEnabled true);' – vinitius 2015-01-26 22:03:09

回答

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); 
} 

希望它可以帮助!