Android简单微调器项

Android简单微调器项,android,android-layout,android-spinner,Android,Android Layout,Android Spinner,这个问题与这个问题有关: 由于声誉不好,我无法发表评论,因此我还有一个问题: 如果我复制并粘贴android.R.simple\u微调器\u项目布局,我会在 android:layout_height="?android:attr/dropdownListPreferredItemHeight" 说“error:error:Attribute不是公共的。(在'layout_height'处,值为'?android:attr/dropdownlistpreferitemheight') 我刚刚添

这个问题与这个问题有关:

由于声誉不好,我无法发表评论,因此我还有一个问题:

如果我复制并粘贴android.R.simple\u微调器\u项目布局,我会在

android:layout_height="?android:attr/dropdownListPreferredItemHeight"
说“error:error:Attribute不是公共的。(在'layout_height'处,值为'?android:attr/dropdownlistpreferitemheight')

我刚刚添加了
android:gravity=“right”
以使微调器项目对齐到右侧


如何解决此错误?

您只能使用系统定义为公共的android资源(主题或属性)

由于attr
“?android:attr/dropdownlistpreferItemHeight”
不是公共的,您不能使用它

相反,您可以使用

android:layout\u height=“wrap\u content”

用于微调器项布局


另一种解决方法可能是将资源从SDK复制到项目中,然后在项目中使用它们。

然后您必须对其进行设计

layout/my_微调器_textview.xml

 <?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    style="?android:attr/spinnerItemStyle"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:gravity="right" />

这就是我设置适配器的方法

 private String[] state= {"Andra Pradesh","Arunachal Pradesh","Assam","Bihar","Haryana","Himachal Pradesh", "Jammu and Kashmir", "Jharkhand","Karnataka", "Kerala","Tamil Nadu"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
        ArrayAdapter<String> adapter_state = new ArrayAdapter<String>(this,  R.layout.my_spinner_textview, state);
        adapter_state.setDropDownViewResource(R.layout.my_spinner_textview);
        Spinner spinner=(Spinner)findViewById(R.id.spinner1);
        spinner.setAdapter(adapter_state);

    }
private String[]state={“安得拉邦”、“阿鲁纳恰尔邦”、“阿萨姆”、“比哈尔”、“哈里亚纳”、“喜马偕尔邦”、“查谟和克什米尔”、“贾坎德”、“卡纳塔克邦”、“喀拉拉邦”、“泰米尔纳德邦”};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
ArrayAdapter_state=新的ArrayAdapter(此,R.layout.my_微调器_textview,state);
adapter_state.setDropDownViewResource(R.layout.my_微调器_textview);
微调器微调器=(微调器)findViewById(R.id.spinner1);
spinner.setAdapter(适配器状态);
}

如果你不在它前面加上安卓,它似乎适合我,比如:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@android:id/text1"
             style="?android:attr/spinnerDropDownItemStyle"
             android:singleLine="true"
             android:layout_width="match_parent"
             android:layout_height="?attr/dropdownListPreferredItemHeight"
             android:ellipsize="marquee"/>

使用这些属性创建自定义布局。您可能希望稍后再设置主题


此资源是私有的,因此只有该属性来自的库才能使用它。因此,您需要获取此属性的大小并在应用程序中创建它。从源代码:

我们可以在第50行和/或第84行看到该属性。 因此,在dimens.xml文件中,您可以编写:

64dip

然后像引用普通资源一样引用它:


android:layout\u height=“@dimen/dropdownlistpreferitemheight”

使用
android:layout\u height=“wrap\u content”
。您不能使用
DropDownListReferredItemHeight
,因为它不是公共的。我已经尝试过“包装内容”,但这将从根本上最小化项目高度,使其变小。我只是想保持默认的尺寸。哇,每个人都给出了同样糟糕的建议,这会删除每个项目之间的空间。为什么会有人对此感到满意呢?我知道,但这也会将路线设置为左侧。我想要右对齐的默认视图。对不起,我的意思是,这将包装内容,因此listitem比
DropDownListReferredItemHeight
小。如果我知道会有多高,我可以设定高度。。。这不是一个好办法though@Zuop它是
64dip
。这没有回答问题。它怎么没有回答问题?它直接回答了这个问题……@DanielWilson
android:layout_height=“?attr/dropdownlistpreferItemheight”
在appcompat-v7中被标记为私有
android:layout_width="match_parent"
android:layout_height="48dp"