如何使工具栏左边缘与搜索图标之间的距离与工具栏右边缘和取消图标之间的距离相同?

时间:2015-08-13 17:10:41

标签: android searchview android-toolbar appcompat-v7-r21 appcompat-v7-toolbar

我正在尝试向Material Design SearchView / Toolbar添加ActionBar,以便SearchView默认展开并占用{Toolbar的整个空间1}}宽度方面。到目前为止,我有以下Toolbar

enter image description here

问题在于:

  1. 我希望“搜索”图标与屏幕左边缘的距离与屏幕右边缘的X图标的距离相同。 我该怎么做?

  2. 只有当我开始输入搜索查询时,才会显示X图标,如果我按下它取消查询,它就会消失。我希望它出现Toolbar后出现(就在“活动”出现时),并且即使在没有搜索查询(由用户键入)和搜索提示文本时也保持不变是可见的。 我该怎么做?

  3. 我做了什么:

    我尝试将android:contentInsetStartandroid:contentInsetLeftapp:contentInsetStartapp:contentInsetLeft添加到Toolbar XML,但没有帮助。然后我尝试从Activity的onCreate()中找到Toolbar(通过findViewById()),然后toolbar.setContentInsetsAbsolute(0,0);没有帮助。

    然后我尝试在onCreateOptionsMenu()中将setSupportActionBar(Toolbar)添加到onCreate()和ActionBar.LayoutParams params = new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT); searchView.setLayoutParams(params);,但是徒劳无功。

    SSCCE代码:

    MainActivity.java

    public class MainActivity extends AppCompatActivity {
        private TextView textView;
        private Toolbar toolbar;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_main);
            textView = (TextView) findViewById(R.id.mainActivity_textView);
            toolbar = (Toolbar) findViewById(R.id.mainActivity_toolbar);
    
            setSupportActionBar(toolbar);
    
            toolbar.setContentInsetsAbsolute(0,0);
    
    
            handleIntent(getIntent());
        }
    
        @Override
        protected void onNewIntent(Intent intent) {
            setIntent(intent);
            handleIntent(intent);
        }
    
        private void handleIntent(Intent intent) {
            if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
              String query = intent.getStringExtra(SearchManager.QUERY);
              doMySearch(query);
            }
        }
    
        private void doMySearch(String searchQuery) {
            textView.setText(searchQuery); 
        }
    
        @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);
    
            // Inflate the options menu from XML
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.main, menu);
    
            // Get the SearchView and set the searchable configuration
            SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
            MenuItem searchMenuItem = menu.findItem(R.id.action_search);
            SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
            // Assumes current activity is the searchable activity
            searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
            //searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
    
            return true;
        }
    
        @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();
            return super.onOptionsItemSelected(item);
        }
    }
    

    activity_main.xml中

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="practice_projects.materialdesigngooglenowlikesearchviewgive.MainActivity" >
    
        <include android:id="@+id/mainActivity_toolbar"
            layout="@layout/app_bar"/>
    
        <TextView
            android:id="@+id/mainActivity_textView"
            android:layout_below="@id/mainActivity_toolbar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    
    </RelativeLayout>
    

    app_bar.xml

        <?xml version="1.0" encoding="utf-8"?>
        <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:contentIntentStart="0dp"
            android:contentIntentLeft="0dp"
            app:contentIntentStart="0dp"
            app:contentIntentLeft="0dp" >
        </android.support.v7.widget.Toolbar>
    

    RES /菜单/ main.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="practice_projects.materialdesigngooglenowlikesearchviewgive.MainActivity" >
    
        <item 
            android:id="@+id/action_search"
            android:orderInCategory="100"
            android:title="@string/searchMenuIcon_title"
            android:icon="@drawable/ic_search_black_24dp"
            app:showAsAction="always"
            app:actionViewClass="android.support.v7.widget.SearchView"
            app:iconifiedByDefault="false" /> 
    
    </menu>
    

    RES / XML / searchable.xml

    <?xml version="1.0" encoding="utf-8"?>
    <searchable xmlns:android="http://schemas.android.com/apk/res/android"
        android:label="@string/app_name"
        android:hint="@string/search_hint" >
    </searchable>
    

    RES /值/ styles.xml

    <resources>
        <style name="AppBaseTheme" parent="Theme.AppCompat.Light">
            <item name="colorPrimary">@color/primary</item>
            <item name="colorPrimaryDark">@color/primaryDark</item>
            <item name="colorAccent">@color/accent</item>
        </style>
    
        <style name="AppTheme" parent="AppBaseTheme"></style>
    
    </resources>
    

    RES /值* -v21 * / styles.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="AppTheme" parent="AppBaseTheme"></style>
    </resources>
    

1 个答案:

答案 0 :(得分:1)

我相信

    android:contentIntentStart="0dp"
    android:contentIntentLeft="0dp"
    app:contentIntentStart="0dp"
    app:contentIntentLeft="0dp"

本来是

    android:contentInsetStart="0dp"
    android:contentInsetLeft="0dp"
    app:contentInsetStart="0dp"
    app:contentInsetLeft="0dp"