2010-12-26 7 views
43

흰색 배경을 사용하고 있으므로 ListView textColor를 검정색으로 설정하려고합니다.안드로이드리스트 뷰 텍스트 색상

은 여기 내 MailActivity

public class MailActivity extends ListActivity { 

    String[] listItems = { "Compose", "Inbox", "Drafts", "Sent" }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.mails); 

     setListAdapter(new ArrayAdapter(this, 
       android.R.layout.simple_list_item_1, listItems)); 

    } 
} 

내 XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFF"> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 

    <TextView 
     android:id="@android:id/empty" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Empty set" 
     android:textColor="#000000" /> 

</LinearLayout> 

나는 흰색으로 배경을 받고 있지만, 검은 색으로 전경을 설정하는 곳 모르겠습니다 해요입니다. 나는 xml에서 시도해 보았고 도움이되지 않는 것처럼 보였다.

답변

135

좋아, 여기에 당신이 명확 약해야 몇 가지 사항은 다음과 같습니다

  1. 당신이 당신의 XML 파일에 설정되는 배경색이 활동입니다 아닌 많은 ListItems 사용자가 정의한 위해 노력하고 있습니다.
  2. 모든 목록 항목에는 목록 항목에 복잡한 레이아웃을 사용하는 경우 전달되거나 확장되어야하는 자체 레이아웃 파일이 있습니다.

내가 코드 샘플 이것을 설명하려고합니다 :

는 **** 많은 ListItems 레이아웃 시작할 수 있습니다 ** : 말하자면 당신의 당신의 res/layout 폴더 안드로이드 프로젝트에 저장 ** list_black_text .XML

<?xml version="1.0" encoding="utf-8"?> 
<!-- Definig a container for you List Item--> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:gravity="center_vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <!-- Defining where should text be placed. You set you text color here--> 
    <TextView 
     android:id="@+id/list_content" 
     android:textColor="#000000" 
     android:gravity="center" 
     android:text="sample" 
     android:layout_margin="4dip" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
    /> 
</LinearLayout> 

음, TextView 간단한 레이아웃은 정확합니다. TextView를 사용하려면 ID를 할당해야합니다.

이제 화면/액티비티/수석 레이아웃이 나오는데, 내가 말한대로 android:background 속성을 사용하여 화면에 배경을 정의했습니다. 거기에 TextView도 정의되어 있고 거기에 내용/목록 항목을 정의하려고한다고 생각합니다.이 부분은 필요하지 않습니다.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFF"> 

    <ListView 
     android:id="@android:id/list" android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
     <!-- REMOVED TEXT VIEW, AND KEEPING BACKGROUND WHITE --> 
</LinearLayout> 

그리고 마지막으로, 가장 중요한 것은, 당신의 어댑터를 설정합니다

여기에 편집 된 레이아웃입니다. 텍스트 뷰 ID입니다

setListAdapter(new ArrayAdapter<String>(
      this, R.layout.list_black_text, R.id.list_content, listItems)); 

공지 사항 우리는 R.layout.list_black_text은 어댑터에 전달하는 레이아웃 리소스 및 R.id.list_content 우리는 선언했다. ArrayAdapter는 일반이기 때문에 String 유형으로 변경했습니다.

나는 이것이 모든 것을 설명하기를 바랍니다. 동의하면 내 대답에 동의 표시를하십시오.

지저분한 그러나 당신이 정의하는 복잡한 레이아웃을 진행하지 않으려면 당신은 또한 빠른 수정하여이 작업을 수행 할 수 있습니다
좋은 빠른 수정 방법 등

어댑터를 인스턴스화하는 동안

는 내부 클래스를 선언 my_styles.xmlres/values에 저장 :

ArrayAdapter<String> adapter=new ArrayAdapter<String>(
      this, android.R.layout.simple_list_item_1, listItems){ 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View view =super.getView(position, convertView, parent); 

      TextView textView=(TextView) view.findViewById(android.R.id.text1); 

      /*YOUR CHOICE OF COLOR*/ 
      textView.setTextColor(Color.BLUE); 

      return view; 
     } 
    }; 

    /*SET THE ADAPTER TO LISTVIEW*/ 
    setListAdapter(adapter); 
+0

고마워요. 친구. ListView에 대한 별도의 XML 파일이 있다는 것을 결코 알지 못했습니다. –

+0

이것은 나에게 오류를줍니다. ArrayAdapter는 리소스 ID가 TextView 여야합니다. 자신의 어댑터를 쓰지 않고 어떻게 작동 시키려고 했습니까? – odiggity

+0

@odiggity, 4 대신에 4 인수 생성자를 사용하십시오. 이미 그렇게하고 있다면, 4 arg 생성자의 3 번째 인수는 목록 항목 레이아웃에 설명 된 textview에 대한 id 참조입니다. 짧은 R.id.list_content my 예 : R.layout으로 지정된 내 목록 항목 레이아웃의 textview를 참조하는 id입니다.list_black_text – Shardul

3

각 항목의 레이아웃을 정의하는 레이아웃 * simple_list_item_1 *에 텍스트 색상을 정의해야합니다.

ListView가 아닌 ​​LinearLayout의 배경색을 설정합니다. LinearLayout의 아이 항목의 배경색은 기본적으로 투명합니다 (대부분의 경우).

그리고 ListView의 일부가 아닌 TextView의 검은 색 텍스트 색을 설정합니다. 여기는 자체 항목 (LinearLayout의 하위 항목)입니다.

21
  1. 는 예를 들어, 스타일 파일 만들기 :이 작업을 수행하기 위해, 여기에 코드 샘플입니다.
  2. 는 다음 코드를 추가합니다 :

    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
    
    <style name="ListFont" parent="@android:style/Widget.ListView"> 
        <item name="android:textColor">#FF0000</item> 
        <item name="android:typeface">sans</item> 
    </style> 
    
    </resources> 
    
  3. AndroidManifest.xmlandroid:theme AS를 속성에 Activity 정의에 스타일을 추가하고 값으로 사용자가 만든 스타일의 이름을 지정합니다. 예를 들어

    <activity android:name="your.activityClass" android:theme="@style/ListFont"> 
    

참고 : Widget.ListViewhere에서 온다. this도 확인하십시오.

+1

나는 이것을 시도하고 제목 표시 줄의 색을 변경하고 목록 항목의 색은 변경하지 않습니다. – mdegges

+0

그것의 위대함, 나는 그것을 좋아한다. 왜냐하면 내가 listview에서 항목을 동적으로 추가하고 있기 때문이다. 나는 어떤 텍스트 뷰도 정의 할 필요가 없었다 .... –

+0

나를 위해 일하지 않는다 –

0

getApplicationContext()을 절대 사용하지 마십시오. 액티비티를 컨텍스트로 사용하십시오. 도움이되는지 확인하십시오.

여기에서 확인하십시오 : CommonsWare answers

6

은 내가 simple_list_item_1 (Alt는 + 클릭) 복제 내 res/layout 폴더에 복사본을 배치,이 내용으로 list_white_text.xml에 이름 :

<?xml version="1.0" encoding="utf-8"?>  
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    android:gravity="center_vertical" 
    android:textColor="@color/abc_primary_text_material_dark" 
    android:minHeight="?android:attr/listPreferredItemHeightSmall" /> 

android:textColor="@color/abc_primary_text_material_dark"를 번역 내 장치에서 흰색으로.

다음 java 코드 :

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_white_text, myList); 
-2
당신은 당신의 코드에서이 작업을 수행 할 수 있습니다

: 당신이 만들고 싶어 .if 당신이 당신의 작업 스타일을 설정 didnot 경우

final ListView lv = (ListView) convertView.findViewById(R.id.list_view); 

for (int i = 0; i < lv.getChildCount(); i++) { 
    ((TextView)lv.getChildAt(i)).setTextColor(getResources().getColor(R.color.black)); 
} 
0

그것은 당신에게 검은 배경을 보여줍니다 흰색 배경, 목록보기의 검은 색 텍스트와 같은 변경 사항은 다음 과정이 어렵습니다.

안드로이드 ADD : 테마 = "@ 스타일/AppTheme을" 를 안드로이드 매니페스트에.

+0

편집 필요 – Billa

관련 문제