2014-06-09 112 views
4

我有一个搜索视图和一个按钮,我的操作栏,但按钮只显示在横向模式,但我尝试它不会显示在纵向模式。在搜索视图中没有显示的操作栏按钮android

风景模式

Landscape Mode

人像模式

Portrait Mode

这是我menu.xml文件

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
<item 
    android:id="@+id/menu_item_search" 
    android:title="Search" 
    android:showAsAction="ifRoom" 
    android:icon="@android:drawable/ic_menu_search" 
    android:actionViewClass="android.widget.SearchView" /> 
<item 
    android:id="@+id/submit" 
    android:title="submit" 
    android:showAsAction="always" /> 
</menu> 

这是我的主要活动

public class Myclass extends Activity implements OnQueryTextListener,OnItemClickListener { 
GroupAdapter grpAdapter; 
public static ArrayList<GroupsModel> arrayOfList; 
public static ListView listView; 
public static String base_url = "myurl"; 
private SeekBar volumeControl = null; 
private TextView year; 
private int progressChanged = 0; 
private Menu menu_data; 
MenuItem submitBtn; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.two); 
    ActionBar actionBar = getActionBar(); 
    //actionBar.setDisplayHomeAsUpEnabled(true); 
    actionBar.setDisplayShowTitleEnabled(false); 
    actionBar.setHomeButtonEnabled(false); 
    actionBar.setDisplayShowHomeEnabled(false); 
    volumeControl = (SeekBar) findViewById(R.id.volume_bar); 
    year = (TextView)findViewById(R.id.year_level); 
    volumeControl.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){ 
      progressChanged = progress; 
      year.setText(Integer.toString(progressChanged+7)); 
     } 
     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 
     public void onStopTrackingTouch(SeekBar seekBar) { 

     } 
    }); 
    arrayOfList = new ArrayList<GroupsModel>(); 
    listView = (ListView) findViewById(R.id.group_listview); 
    listView.setOnItemClickListener(this); 
    listView.setTextFilterEnabled(true); 

    new ProgressTask(two.this).execute(); 

} 

private class ProgressTask extends AsyncTask<String, Void, Boolean> { 
    private ProgressDialog dialog; 
    @SuppressWarnings("unused") 
    private two activity; 
    public ProgressTask(two two) { 
     this.activity = two; 
     context = two; 
     dialog = new ProgressDialog(context); 
    } 
    private Context context; 
    protected void onPreExecute() { 
     this.dialog.setMessage("Progress start"); 
     this.dialog.show(); 
    } 
    @Override 
    protected void onPostExecute(final Boolean success) { 
     if (dialog.isShowing()) { 
      dialog.dismiss(); 
     } 
    } 
    protected Boolean doInBackground(final String... args) { 
     //arrayOfList = new ArrayList<GroupsModel>(); 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     //params.add(new BasicNameValuePair("","")); 
     JSONParser jp = new JSONParser(); 
     JSONArray groups_obj = jp.makeHttpRequest(base_url + "groups/all", "GET", params); 
     for (int i = 0; i < groups_obj.length(); i++) { 
      GroupsModel group = new GroupsModel(); 
      try { 
       JSONObject grp = groups_obj.getJSONObject(i); 
       group.setGroupId(grp.getInt("id")); 
       group.setGroupname(grp.getString("name")); 
       arrayOfList.add(group); 
      } 
      catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
     two.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       grpAdapter = new GroupAdapter(two.this, R.layout.two_row,arrayOfList); 
       listView.setAdapter(grpAdapter); 
      } 
     }); 

     return null; 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    menu_data = menu; 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.menu_item_search).getActionView(); 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     searchView.setSubmitButtonEnabled(false); 
     searchView.setOnQueryTextListener(this); 
     searchView.setQueryHint("My text"); 
     searchView.setIconifiedByDefault(false); 

     submitBtn = (MenuItem)menu_data.findItem(R.id.submit); 
     submitBtn.setIcon(R.drawable.button22); 
     submitBtn.setEnabled(false); 

     return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle item selection 
    switch (item.getItemId()) { 
    case R.id.submit: 
     if(submitBtn.isVisible()) 
     Toast.makeText(getApplicationContext(), Integer.toString(progressChanged+7),Toast.LENGTH_LONG).show(); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

@Override 
public boolean onQueryTextChange(String newText) 
{ 
     // this is your adapter that will be filtered 
     if (TextUtils.isEmpty(newText)) 
     { 
      listView.clearTextFilter(); 
     } 
     grpAdapter.getFilter().filter(newText.toString()); 
     return true; 
} 

@Override 
public boolean onQueryTextSubmit(String query) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position,long id) { 
    // TODO Auto-generated method stub 
    submitBtn.setIcon(R.drawable.button111); 
    submitBtn.setEnabled(true); 
    for (GroupsModel s : arrayOfList) 
     s.setChecked(false); 
    final boolean isChecked = GroupAdapter.items.get(position).getChecked(); 
    if(isChecked==false){ 
     GroupAdapter.items.get(position).setChecked(!isChecked); 
     grpAdapter.notifyDataSetChanged(); 
    } 
    else{ 
     GroupAdapter.items.get(position).setChecked(isChecked); 
     grpAdapter.notifyDataSetChanged(); 
    } 
} } 

请帮帮我。

+1

您自己添加按钮的任何原因,而不是使用SearchView提供的提交按钮? – tknell

回答

3

如果不关心你,搜索查看被折叠在一开始,尝试配置搜索查看这样的:

android:showAsAction="collapseActionView|ifRoom" 

这应该使动作条同时显示,该搜索查看和你的按钮。另外,SearchView只会在剩余的空间扩展时占据左侧的空间。

+0

我需要将searchview扩展并显示按钮 – sharath

+0

您是否试图设置SearchView的maxWidth,以便它不占用整个空间?或者创建一个包含SearchView和Button的新ActionView,以便您可以设置宽度以适应操作栏,而不使用maxWidth – tknell

+0

事情是我需要扩展的searchview来填充操作栏,我还需要显示按钮。 – sharath

1

如果您的应用使用支持库兼容性上的版本低了Android 2.1,的showAsAction属性根据developer.android.com

不可从Android:命名空间。相反,该属性由支持库提供,您必须定义自己的XML名称空间并将该名称空间用作属性前缀。 (自定义XML名称空间应该基于您的应用程序名称,但它可以是您想要的任何名称,并且只能在您声明它的文件范围内访问。)例如:

res/menu/main_activity_actions .XML >>>>

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:yourapp="http://schemas.android.com/apk/res-auto" > 
    <!-- Search, should appear as action button --> 
    <item android:id="@+id/action_search" 
      android:icon="@drawable/ic_action_search" 
      android:title="@string/action_search" 
      yourapp:showAsAction="ifRoom" /> 
    ... 
</menu> 
+0

我支持从api 14到19,我没有支持android 2.1 – sharath

1

一个搜索查看会默认占用了大部分,如果不是全部在纵向模式下的操作栏。尝试减小menu.xml中SearchView的大小,并查看是否显示按钮。

+0

是的,它显示时,我减少了searchview的大小。但我需要searchview的大小来自动调整 – sharath

+0

你是什么意思通过自动调整?尝试玩弄两个项目的大小(宽度和高度),直到达到所需的大小 – frgnvola

+0

但是,如果我为我的搜索视图(特定屏幕大小的手机)设置了所需的宽度,它是否适用于较低分辨率和较高分辨率手机? – sharath

相关问题