2012-03-23 1 views

답변

1

자신 만의 레이아웃을 만들어야합니다. 사용자 정의 레이아웃을 만들고 표준 어댑터 (예 : ArrayAdapter)를 사용하려면 표준 레이아웃에서와 마찬가지로 사용자 정의 레이아웃에서 동일한 ID를 지정해야합니다. 예를 들어 simple_list_item_checked의 TextView는 "@android : id/text1"(http://www.devdaily.com/java/jwarehouse/android-examples/platforms/android-2/data/res/layout/simple_list_item_checked) ID를 갖습니다. xml.shtml). 사용자 정의 레이아웃에서 해당 id를 지정하십시오. 따라서 사용자 정의 어댑터를 작성할 필요가 없습니다. 따라서 가장 좋은 방법은 표준 XML 레이아웃을 복사하고 변경하려는 내용을 변경하는 것입니다.

+1

감사합니다. 하지만 표준 레이아웃에있는 것보다 다른 ID (또는 ID가 없음)를 주면 잘못 될 수 있습니다. 나는 simple_list_item_checked 레이아웃을 복사하고 완전히 이드를 제거했고 다음과 같이로드 할 때 여전히 잘 작동하는 것처럼 보입니다 :'ArrayAdapter adapter = new ArrayAdapter (context, R.layout.custom_checked_list, arraylist); setListAdapter (adapter); ' – mattboy

+0

예, "layout"== a TextView가 맞습니다. 그러나 다른 표준 레이아웃에서는 이것이 작동하지 않아야합니다. LayoutManager 내에서 하나 이상의보기 (예 : LinearLayout)로 구성된 레이아웃을 의미 할 수도 있습니다. – 207

+1

+1 좋은 지적입니다. 어댑터 구현을 살펴 보았습니다. 어댑터가 textViewResourceId로 시작되지 않은 경우 ArrayAdapter는 ID를 신경 쓰지 않습니다. 리소스 ID가 제공되지 않으면 어댑터는 _whole_ ressource가 TextView라고 가정합니다. 그렇지 않으면 어댑터는 주어진 리소스 ID (finViewById)를 검색합니다 (ArrayAdapter impl https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter.java 참조). – 207

0

예, 그렇습니다. 여기에 비슷한 일이 성취되는 것 (고해상도/값/styles.xml) :

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<style name="ContactLabelTextView"> 
    <item name="android:layout_width">wrap_content</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:gravity">right</item> 
    <item name="android:textSize">14sp</item> 
    <item name="android:textColor">@android:color/white</item> 
    <item name="android:layout_marginLeft">5dp</item> 
    <item name="android:layout_marginRight">5dp</item> 
    <item name="android:layout_marginTop">5dp</item> 
    </style> 
    <style name="questionTableRow"> 
     <item name="android:layout_width">wrap_content</item> 
     <item name="android:layout_height">wrap_content</item> 
     <item name="android:layout_margin">5dp</item> 
     <item name="android:layout_marginLeft">5dp</item> 
     <item name="android:background">@drawable/textview_border</item> 
    </style> 
</resources> 

그리고, 당신은 당신이 (생성 main.xml에 한 레이아웃 파일의 요소에 스타일을 적용 할 때, 고해상도 /layout/your_custom_layout.xml) :

<?xml version="1.0" encoding="utf-8"?> 
    <TableRow 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/questionTableRow" 
     style="@style/questionTableRow" 

은 분명히 당신은 텍스트 뷰와 이러한 목표를 달성하기 위해 찾고 있습니다. textView가 특정 스타일을 얻는 내 자신의 코드 예제를 제공했습니다. 실제로 textView 스타일을 적용 할 필요조차 없지만, tableRow에 스타일을 적용한 위치에 붙여 넣기 만하면 xml 요소에 적용하는 방법을 볼 수 있습니다.

필요한 것이 있습니까?

+0

고마워,하지만 내 자신의 레이아웃 파일을 만들 필요가 없지만 어떻게 든 android.Routlay.simple_list_item_checked를 상속 한 다음 변경하려는 특정 값 (이 경우 텍스트 크기) 만 재정의하지만이 예제에서는 당신은 처음부터 자신의 스타일을 만들었습니다. 지금까지 안드로이드의 표준 레이아웃을 직접 변경할 수없는 것처럼 보였습니다. 레이아웃. 207로 작성한 버전을 만들어야합니다. – mattboy

관련 문제