在Actionment

时间:2017-05-02 20:07:31

标签: android android-layout android-fragments android-actionbar android-toolbar

因此,开始研究如何创建一个带有自动填充文本视图的操作栏进行搜索。我发现的大部分解决方案都接近于我所寻找的解决方案,但是他们似乎都专注于在一行上添加到操作栏中的任何和其他视图。

进一步复杂化的是,这一切都位于视图寻呼机片段中,其父活动已经有一个操作栏。因此,使用带有工具栏的setSupportingActionBar调用会引发非法状态异常。

不确定我所支持的内容是否真的得到了支持,但现在就可以了。

我正在寻找的最终结果是

enter image description here

这是我写的

*包含名为autocomplete.xml *

的自动填充文本视图的自定义视图
<?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:orientation="vertical">

    <AutoCompleteTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/search_text_view"
        android:paddingTop="15dp"
        android:paddingBottom="15dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:drawableLeft="@drawable/ic_search_blue"
        android:background="@drawable/white_edittext"/>

</LinearLayout>

这是我片段中用于设置操作栏的代码

private void initializeActionsBarWithAutocomplete(){
        ActionBar actionBar = ((MyParentActivity) getActivity()).getSupportActionBar();
        actionBar.setTitle(getResources().getString(R.string.default_title));

        View autoCompleteView = LayoutInflater.from(getContext()).inflate(R.layout.autocomplete, null);
        mSearchTextView = (AutoCompleteTextView) autoCompleteView.findViewById(R.id.search_text_view);
        mSearchTextView.setAdapter(mTypeAheadAdapter);
        mSearchTextView.setOnItemClickListener(this);
        mSearchTextView.addTextChangedListener(this);

        actionBar.setCustomView(autoCompleteView);
        actionBar.setDisplayShowCustomEnabled(true);
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

我最终得到的是

enter image description here

因此,假设我尝试做的事情是可能的,而且我至少在正确的轨道上,这究竟是什么问题。我假设让自定义视图匹配父级会强制textview占用自己的行并相应地扩展操作栏的大小。显然情况并非如此。我查看了一些允许您明确设置操作栏高度的文章,但从我能理解的内容来看,该方法会在操作栏中的视图下显示相同的外观。

1 个答案:

答案 0 :(得分:1)

您可以在XML中使用Toolbar小部件,并根据您的需要对其进行自定义。

以下是包含Toolbar的{​​{1}}布局:

AutoCompleteTextView

<android.support.design.widget.AppBarLayout android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:titleTextColor="#FFFFFF"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="20dp"> <TextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:text="@string/app_name" android:textColor="#ffffff" android:textSize="20sp" android:textStyle="bold" /> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="40dp" android:layout_margin="8dp" android:layout_centerInParent="true" cardview:cardBackgroundColor="#ffffff" cardview:cardCornerRadius="2dp" cardview:cardElevation="0dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:focusable="true" android:focusableInTouchMode="true"> <AutoCompleteTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/search_text_view" android:paddingTop="15dp" android:paddingBottom="15dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:drawableLeft="@drawable/ic_search_blue" android:background="@drawable/white_edittext"/> </RelativeLayout> </android.support.v7.widget.CardView> </LinearLayout> </android.support.v7.widget.Toolbar> </android.support.design.widget.AppBarLayout> 代码中试试这个:

JAVA

<强>输出:

enter image description here

希望这会有所帮助〜