Android主题不会影响列表项中的TextViews

时间:2015-01-06 06:04:28

标签: android

我在整个应用程序中使用了一个主题,在主题中,文本颜色简单地声明为:

android:textColor="@android:color/black"

对于位于活动内部的TextView,颜色应用得很好。但是,当我在列表项内部创建一个TextView(由适配器充气)时,文本颜色为白色。

是否有人知道需要在主题中声明要受影响的列表项的样式?

列表项的完整XML:

<CheckBox
    android:id="@+id/lt_checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    android:layout_centerVertical="true"
    android:layout_alignParentRight="true"/>

<TextView
    android:id="@+id/lt_length"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_toLeftOf="@id/lt_checkbox"
    android:textSize="24dp"/>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_margin="8dp"
    android:layout_centerVertical="true"
    android:layout_toLeftOf="@id/lt_length"
    android:layout_alignParentLeft="true"
    android:orientation="vertical">

    <TextView
        android:id="@+id/lt_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="12dp"
        android:textSize="18dp"/>

    <TextView
        android:id="@+id/lt_subtitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14dp"/>

</LinearLayout>

列表的XML:

<ListView
    android:id="@+id/altl_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

适配器:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LocalTrack track = getItem(position);

    ItemHolder holder;
    if(convertView == null || convertView.getTag() == null) {
        convertView = mInflater.inflate(R.layout.listem_track, parent, false);

        holder = new ItemHolder();
        holder.title = (TextView) convertView.findViewById(R.id.lt_title);
        holder.length = (TextView) convertView.findViewById(R.id.lt_length);
        holder.checkbox = (CheckBox) convertView.findViewById(R.id.lt_checkbox);

        convertView.setTag(holder);
    }
    else
        holder = (ItemHolder) convertView.getTag();

    holder.title.setText(track.getTitle());
    holder.length.setText(Helpbot.convertMillisToTrackLength(track.getLength()));
    holder.checkbox.setChecked(mSelectedTracks.contains(track));

    return convertView;
}

3 个答案:

答案 0 :(得分:6)

这是因为您使用ListView ContextApplication或其他衍生产品)的LayoutInflater.from(getApplicationContext());来扩充Activity的行布局,而不是使用您的{ {1}} Context

您将从getApplicationContext()Activity.this获得的上下文之间的区别在于Context对其中任何一个的实现。

ContextApplication的{​​{1}}和Context都包含在Activity内,并代理他们对内部“基地”的调用“ContextWrapper

这里的区别在于Context类是一个单例,并且只有一个全局实现用于整个应用程序,而每个Activity - 从继承自Application - 具有它自己的独特实现每个ContextWrapper

现在这就是为什么Activity没有 - 而且不能 - 遵守您在清单中定义的主题规则,但getApplication()提供的Context确实/可以

我强烈建议您阅读Dave Smith关于Activity的{​​{3}}。

答案 1 :(得分:0)

<强> item_list_rs.xml

这在ListAdapter中用于listview设计

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:background="@drawable/list_selector" 
 android:orientation="horizontal" 
 android:padding="5dip" > 

 <LinearLayout 
 android:id="@+id/thumbnail" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentLeft="true" 
 android:layout_marginRight="5dip" 
 android:background="@drawable/image_bg" 
 android:padding="3dip" > 

 <ImageView 
 android:id="@+id/image_rs" 
 android:layout_width="80dip" 
 android:layout_height="100dip" 
  android:background="@drawable/image_bg" 
 android:src="@drawable/ic_launcher" /> ///////
 </LinearLayout> 

 <TextView 
 android:id="@+id/nama_rs" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignTop="@+id/thumbnail" 
 android:layout_toRightOf="@+id/thumbnail" 
 android:text="Dilip Birajadar" 
 android:textColor="#3dd63d" 
 android:textSize="12dip" 
 android:textStyle="bold" 
 android:typeface="sans" /> /////////



 <TextView 
 android:id="@+id/link_image_rs" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:visibility="gone" /> 

 <TextView 
 android:id="@+id/id_rs" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:visibility="gone" />

 <TextView
     android:id="@+id/tv_seling_price"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignBottom="@+id/thumbnail"
     android:layout_alignLeft="@+id/nama_rs"
     android:text="Selling Price"
      android:textSize="12dip"
     android:textStyle="bold"
     android:typeface="sans" />

 <TextView
     android:id="@+id/tv_measuring"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignLeft="@+id/nama_rs"
     android:layout_centerVertical="true"
     android:text="Additional-"
     android:textColor="#ad30f6"
      android:textSize="12dip"
     android:textStyle="bold" 
 android:typeface="sans" />

 <TextView
     android:id="@+id/alamat_rs"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignLeft="@+id/telepon_rs"
     android:layout_centerVertical="true"
     android:text="Information:"
     android:textColor="#000000"
     android:textSize="12dip" />

 <TextView
     android:id="@+id/telepon_rs"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignBaseline="@+id/tv_seling_price"
     android:layout_alignBottom="@+id/tv_seling_price"
     android:layout_marginLeft="19dp"
     android:layout_toRightOf="@+id/tv_seling_price"
     android:text="Selling_price"
     android:textColor="#ff0000"
     android:textSize="11dip"
     android:textStyle="bold" />

</RelativeLayout>

<强> ListAdapter.Java

import java.util.ArrayList;
import java.util.HashMap;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ListAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater = null;
    public ImageLoader imageLoader;
    public int[] daftar_rs;



    public ListAdapter(Pay_Per_View a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data = d;
        inflater = (LayoutInflater) activity

        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader = new ImageLoader(activity.getApplicationContext());
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @SuppressLint("InflateParams")
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        if (convertView == null)
            vi = inflater.inflate(R.layout.item_list_rs, null);

        /*TextView id_rs = (TextView) vi.findViewById(R.id.id_rs);*/
        TextView Image_name = (TextView) vi.findViewById(R.id.nama_rs);
        TextView link_image_rs = (TextView) vi.findViewById(R.id.link_image_rs);
        TextView movie_price = (TextView) vi.findViewById(R.id.telepon_rs);
    /*  TextView telepon_rs = (TextView) vi.findViewById(R.id.alamat_rs);*/

        ImageView thumb_image = (ImageView) vi.findViewById(R.id.image_rs);

        HashMap<String, String> daftar_rs = new HashMap<String, String>();
        daftar_rs = data.get(position);

        /*id_rs.setText(daftar_rs.get(Pay_Per_View.TAG_ID_RS));*/

        Image_name.setText(daftar_rs.get(Pay_Per_View.TAG_MOVIE_NAME));

        link_image_rs.setText(daftar_rs.get(Pay_Per_View.TAG_LINK_IMAGE_RS));

        movie_price.setText(daftar_rs.get(Pay_Per_View.TAG_MOVIE_PRICE));

        /*alamat_rs.setText(daftar_rs.get(MainActivity.TAG_MEASURING));

        */


        imageLoader.DisplayImage(daftar_rs.get(Pay_Per_View.TAG_LINK_IMAGE_RS),
                thumb_image);

        return vi;
    }

}

答案 2 :(得分:0)

实际上,您可以为所有应用或活动设置TextViews的默认样式,

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="android:Theme">
    <item name="android:textViewStyle">@style/MyTextViewStyle</item>
</style>

<style name="MyTextViewStyle" parent="android:Widget.TextView">
    <item name="android:textColor">#F00</item>
    <item name="android:textStyle">bold</item>
</style>
</resources>

并将主题设置为您的活动主题。