2014-09-26 4 views
16

이 질문이 하나 관련 : 나는 &이 android.R을 붙여 복사하는 경우안드로이드 간단한 스피너 항목

: 나는 때문에 저 명성 언급 할 수 있기 때문에 android.R.simple_spinner_item

, 나는 추가 질문이 있습니다. simple_spinner_item 레이아웃, 나는 말을

android:layout_height="?android:attr/dropdownListPreferredItemHeight" 

에 오류가 "오류 : 오류 : 특성은 공개되지 않습니다 (값 'layout_height'에서 '안드로이드 : ATTR/dropdownListPreferredItemHeight').."

오른쪽에 spinner_item 정렬을 얻으려고 방금 android:gravity="right"을 추가했습니다.

어떻게이 오류를 해결할 수 있습니까?

+2

사용'안드로이드 : = "wrap_content"'layout_height . 'dropdownListPreferredItemHeight'를 public으로 사용할 수 없습니다. –

답변

1

시스템에 의해 공개로 정의 된 안드로이드 리소스 (테마 또는 속성) 만 사용할 수 있습니다.

attr "?android:attr/dropdownListPreferredItemHeight"은 공개되지 않으므로 사용할 수 없습니다.

대신 스피너 항목 레이아웃

android:layout_height="wrap_content"

를 사용할 수 있습니다.

다른 해결 방법은 SDK의 리소스를 프로젝트에 복사 한 다음 프로젝트에서 사용할 수있는 방법입니다.

+1

나는 이미 "내용 감싸기"를 시도했으나 이것은 항목 높이를 근본적으로 최소화하므로 작아졌습니다. 나는 기본 크기로 머무르고 싶다. – Zuop

+0

와우, 모두가 똑같은 끔찍한 제안을 계속해서 각 항목 사이의 공간을 제거합니다. 왜 아무도 그걸로 만족하지 못했을까요? –

4

그런 다음 디자인해야합니다.

레이아웃/my_spinner_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); 

    } 
+0

알아,하지만 이것도 정렬을 왼쪽으로 설정합니다. 정렬이 올바른 기본보기를 원합니다. – Zuop

+0

미안 해요, 이것은 listitem이'dropdownListPreferredItemHeight'보다 작아 지도록 내용을 감쌀 것입니다. 만약 내가 얼마나 높은지 알고 있다면, 나는 그 헤이 트를 설정할 수있다 ... 아름다운 해결책이 아니다. – Zuop

+1

@Zuop 그것은 '64dips '이다. –

30

나를 위해 작동하는 것 같다 어댑터를 설정하는 방법입니다

<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"/> 
+4

여전히 appcompat v7 라이브러리에서 비공개로 표시되었습니다. – Luis

+3

이것은 질문에 대답하지 않습니다. – arenaq

+3

질문에 어떻게 대답하지 않습니까? 그것은 문자 그대로 직접 질문에 답합니다. –

1
android:layout_width="match_parent" 
android:layout_height="48dp" 

Create a custom layout with these attributes. You might want to theme it later.

0

이 리소스는 비공개 인 경우 해당 리소스가 제공하는 라이브러리 만 사용할 수 있습니다. 따라서이 속성의 크기를 가져와 앱 내에서 생성해야합니다. 소스 코드에서 : https://android.googlesource.com/platform/frameworks/support/+/50fe5ec/appcompat/res/values/themes.xml

우리는 50 행 및/또는 84 행의 속성을 볼 수 있습니다. 그래서 dimens.xml 파일에서 당신이 쓸 수 있습니다 :

<dimen name="dropdownListPreferredItemHeight">64dip</dimen>

을 다음처럼 참조 할 것 일반 자원 :

android:layout_height="@dimen/dropdownListPreferredItemHeight"

관련 문제