Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将下拉微调器锚定到父线性布局?_Android_Android Spinner - Fatal编程技术网

Android 如何将下拉微调器锚定到父线性布局?

Android 如何将下拉微调器锚定到父线性布局?,android,android-spinner,Android,Android Spinner,如何将下拉微调器固定到perent Linearlayout 我有一个文本视图和一个水平线性布局中的微调器。我想将LinearLayout设置为微调器下拉列表的锚点。就像使用AutoCompleteTextViews下拉列表一样 <LinearLayout android:id="@+id/parent" android:layout_width="fill_parent" android:layout

如何将下拉微调器固定到perent Linearlayout

我有一个文本视图和一个水平线性布局中的微调器。我想将LinearLayout设置为微调器下拉列表的锚点。就像使用AutoCompleteTextViews下拉列表一样

        <LinearLayout
            android:id="@+id/parent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="horizontal"
            android:gravity="bottom"
            android:weightSum="1" >

            <AutoCompleteTextView
                android:id="@+id/autoText"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight=".8"
                android:gravity="bottom"
                android:dropDownAnchor="@id/parent"/>
            <mycode.CustomSpinner
                android:id="@+id/customSpinner"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight=".2"
                android:drawSelectorOnTop="true"
                android:gravity="bottom"/>
        </LinearLayout>

我发现最简单的方法是扩展ImageButton并添加ListPopupWindow

public class MenuDropDown extends ImageButton {

    private ListPopupWindow mListDropDownWindow;
    private int mDropDownAnchorId;
    private ListAdapter mAdapter;
    private DropDownOnClickListener mDropDownOnClickListener;
    private OnItemClickListener mOnItemClickListener;

    public MenuDropDown(Context context, AttributeSet attrs) {
        this(context, attrs,R.attr.menuDropDown);
    }

    public MenuDropDown(Context context) {
        this(context, null);
    }

    public MenuDropDown(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mListDropDownWindow = new ListPopupWindow(context);

        mListDropDownWindow
                .setPromptPosition(ListPopupWindow.POSITION_PROMPT_BELOW);
        TypedArray a = context.obtainStyledAttributes(attrs,
                R.styleable.MenuDropDown, defStyle, 0);

        mDropDownAnchorId = a.getResourceId(
                R.styleable.MenuDropDown_dropDownAnchor,
                View.NO_ID);
        mListDropDownWindow
                .setOnItemClickListener(new DropDownItemClickListener());
        mListDropDownWindow.setModal(true);
        a.recycle();
        setFocusable(true);


        mDropDownOnClickListener = new DropDownOnClickListener();
        super.setOnClickListener(mDropDownOnClickListener);
    }


    private class DropDownItemClickListener implements
            AdapterView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {

            dissmissDropDown();
            if(mOnItemClickListener != null){
                mOnItemClickListener.onItemClick(parent, v, position, id);
            }
        }
    }

    private class DropDownOnClickListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            showDropDown();
        }
    }

    private void dissmissDropDown() {
        mListDropDownWindow.dismiss();

    }

    public <T extends ListAdapter> void setAdapter(T adapter) {
        mAdapter = adapter;
        mListDropDownWindow.setAdapter(mAdapter);
    }

    public boolean isPopupShowing() {
        return mListDropDownWindow.isShowing();
    }

    public void setOnItemClickListener(AdapterView.OnItemClickListener listener){
        mOnItemClickListener = listener;
    }

    private void showDropDown() {
        if (mListDropDownWindow.getAnchorView() == null) {
            if (mDropDownAnchorId != View.NO_ID) {
                mListDropDownWindow.setAnchorView(getRootView().findViewById(
                        mDropDownAnchorId));
            } else {
                mListDropDownWindow.setAnchorView(this);
            }
        }
        mListDropDownWindow.show();
        if (VERSION.SDK_INT >= 9) {
            mListDropDownWindow.getListView().setOverScrollMode(View.OVER_SCROLL_ALWAYS);
        }

    }

    public ListAdapter getAdapter() {
        return mAdapter;
    }
}
public类菜单下拉按钮{
私有ListPopupWindow mListDropDownWindow;
私有内部MDROPDonanchorid;
私有列表适配器mAdapter;
私有DropDownOnClickListener mDropDownOnClickListener;
private-McClickListener监视器ClickListener;
公共菜单下拉列表(上下文、属性集属性){
这(上下文、属性、R.attr.menuDropDown);
}
公共菜单下拉列表(上下文){
这个(上下文,空);
}
公共菜单下拉列表(上下文、属性集属性、int-defStyle){
超级(上下文、属性、定义样式);
mListDropDownWindow=新列表PopupWindow(上下文);
mListDropDownWindow
.setPromptPosition(下面的ListPopupWindow.POSITION\u PROMPT\u);
TypedArray a=上下文。获取样式属性(属性,
R.styleable.MenuDropDown,defStyle,0);
mDropDownAnchorId=a.getResourceId(
R.styleable.MenuDropDown\u dropDownAnchor,
视图(无_ID);
mListDropDownWindow
.setOnItemClickListener(新的DropDownItemClickListener());
mListDropDownWindow.setModal(true);
a、 回收();
设置聚焦(真);
mDropDownOnClickListener=新的DropDownOnClickListener();
super.setOnClickListener(mDropDownOnClickListener);
}
私有类DropDownItemClickListener实现
AdapterView.OnItemClickListener{
@凌驾
公共控件单击(AdapterView父对象、视图v、内部位置、,
长id){
下拉列表();
如果(MonitorClickListener!=null){
mOnItemClickListener.onItemClick(父项、v、位置、id);
}
}
}
私有类DropDownOnClickListener实现OnClickListener{
@凌驾
公共void onClick(视图v){
showDropDown();
}
}
私有void下拉列表(){
mListDropDownWindow.Disclose();
}
公共无效设置适配器(T适配器){
mAdapter=适配器;
mListDropDownWindow.setAdapter(mAdapter);
}
公共布尔值isPopupShowing(){
返回mListDropDownWindow.isShowing();
}
public void setOnItemClickListener(AdapterView.OnItemClickListener侦听器){
MonitorClickListener=监听器;
}
私有无效决战下拉列表(){
if(mListDropDownWindow.getAnchorView()==null){
if(mDropDownAnchorId!=视图。无\u ID){
mListDropDownWindow.setAnchorView(getRootView().findViewById(
下颌骨);
}否则{
mListDropDownWindow.setAnchorView(此);
}
}
mListDropDownWindow.show();
如果(VERSION.SDK_INT>=9){
mListDropDownWindow.getListView().setOverScrollMode(视图。始终滚动);
}
}
公共ListAdapter getAdapter(){
返回mAdapter;
}
}
attrs.xml:

<attr name="menuDropDown" format="reference" />

<declare-styleable name="MenuDropDown" perent="ImageButton">
    <attr name="dropDownAnchor" format="reference" />
</declare-styleable>

布局:


我发现最简单的方法是扩展ImageButton并添加ListPopupWindow

public class MenuDropDown extends ImageButton {

    private ListPopupWindow mListDropDownWindow;
    private int mDropDownAnchorId;
    private ListAdapter mAdapter;
    private DropDownOnClickListener mDropDownOnClickListener;
    private OnItemClickListener mOnItemClickListener;

    public MenuDropDown(Context context, AttributeSet attrs) {
        this(context, attrs,R.attr.menuDropDown);
    }

    public MenuDropDown(Context context) {
        this(context, null);
    }

    public MenuDropDown(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mListDropDownWindow = new ListPopupWindow(context);

        mListDropDownWindow
                .setPromptPosition(ListPopupWindow.POSITION_PROMPT_BELOW);
        TypedArray a = context.obtainStyledAttributes(attrs,
                R.styleable.MenuDropDown, defStyle, 0);

        mDropDownAnchorId = a.getResourceId(
                R.styleable.MenuDropDown_dropDownAnchor,
                View.NO_ID);
        mListDropDownWindow
                .setOnItemClickListener(new DropDownItemClickListener());
        mListDropDownWindow.setModal(true);
        a.recycle();
        setFocusable(true);


        mDropDownOnClickListener = new DropDownOnClickListener();
        super.setOnClickListener(mDropDownOnClickListener);
    }


    private class DropDownItemClickListener implements
            AdapterView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {

            dissmissDropDown();
            if(mOnItemClickListener != null){
                mOnItemClickListener.onItemClick(parent, v, position, id);
            }
        }
    }

    private class DropDownOnClickListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            showDropDown();
        }
    }

    private void dissmissDropDown() {
        mListDropDownWindow.dismiss();

    }

    public <T extends ListAdapter> void setAdapter(T adapter) {
        mAdapter = adapter;
        mListDropDownWindow.setAdapter(mAdapter);
    }

    public boolean isPopupShowing() {
        return mListDropDownWindow.isShowing();
    }

    public void setOnItemClickListener(AdapterView.OnItemClickListener listener){
        mOnItemClickListener = listener;
    }

    private void showDropDown() {
        if (mListDropDownWindow.getAnchorView() == null) {
            if (mDropDownAnchorId != View.NO_ID) {
                mListDropDownWindow.setAnchorView(getRootView().findViewById(
                        mDropDownAnchorId));
            } else {
                mListDropDownWindow.setAnchorView(this);
            }
        }
        mListDropDownWindow.show();
        if (VERSION.SDK_INT >= 9) {
            mListDropDownWindow.getListView().setOverScrollMode(View.OVER_SCROLL_ALWAYS);
        }

    }

    public ListAdapter getAdapter() {
        return mAdapter;
    }
}
public类菜单下拉按钮{
私有ListPopupWindow mListDropDownWindow;
私有内部MDROPDonanchorid;
私有列表适配器mAdapter;
私有DropDownOnClickListener mDropDownOnClickListener;
private-McClickListener监视器ClickListener;
公共菜单下拉列表(上下文、属性集属性){
这(上下文、属性、R.attr.menuDropDown);
}
公共菜单下拉列表(上下文){
这个(上下文,空);
}
公共菜单下拉列表(上下文、属性集属性、int-defStyle){
超级(上下文、属性、定义样式);
mListDropDownWindow=新列表PopupWindow(上下文);
mListDropDownWindow
.setPromptPosition(下面的ListPopupWindow.POSITION\u PROMPT\u);
TypedArray a=上下文。获取样式属性(属性,
R.styleable.MenuDropDown,defStyle,0);
mDropDownAnchorId=a.getResourceId(
R.styleable.MenuDropDown\u dropDownAnchor,
视图(无_ID);
mListDropDownWindow
.setOnItemClickListener(新的DropDownItemClickListener());
mListDropDownWindow.setModal(true);
a、 回收();
设置聚焦(真);
mDropDownOnClickListener=新的DropDownOnClickListener();
super.setOnClickListener(mDropDownOnClickListener);
}
私有类DropDownItemClickListener实现
AdapterView.OnItemClickListener{
@凌驾
公共控件单击(AdapterView父对象、视图v、内部位置、,
长id){
下拉列表();
如果(MonitorClickListener!=null){
mOnItemClickListener.onItemClick(父项、v、位置、id);
}
}
}
私有类DropDownOnClickListener实现OnClickListener{
@凌驾
公共void onClick(视图v){
showDropDown();
}
}
私有void下拉列表(){
mListDropDownWindow.Disclose();
}
公共无效设置适配器(T适配器){
mAdapter=适配器;
mListDropDownWindow.setAdapter(mAdapter);
}
公共布尔值isPopupShowing(){
返回mListDropDownWindow.isShowing();
}
public void setOnItemClickListener(AdapterView.OnItemClickListener侦听器){
MonitorClickListener=监听器;
}