【问题标题】:Android theme not affecting TextViews inside list itemAndroid主题不影响列表项内的TextViews
【发布时间】:2015-01-07 06:29:17
【问题描述】:

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

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;
}

【问题讨论】:

  • ListView 和 RawItem xmls好吗?
  • @BhavikMehta 问题已更新
  • 在列表项的完整 XML 中,在 中提供 android:textColor="@android:color/black" 以将其显示为黑色,否则代码正确或否则指定 TextView 名称,以便我可以为您构建和回答

标签: android


【解决方案1】:

发生这种情况是因为您使用ApplicationContextLayoutInflater.from(getApplicationContext()); 或其他派生词)扩充了ListView 的行布局,而不是使用ActivityContext

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

ContextApplicationContextActivity 都被包裹在 ContextWrapper 中,并将它们的调用代理到内部“基础”Context

这里的区别在于Application 类是一个单例类,并且对于整个应用程序只有一个全局实现,而每个活动——因为也继承自ContextWrapper——对每个Activity 都有自己独特的实现.

这就是为什么 getApplication() 不 - 也不能 - 遵守您在清单中定义的主题规则,但您的 Activity 提供的 Context 可以/可以。

我强烈建议您阅读 Dave Smith 关于Contexts 的article

【讨论】:

    【解决方案2】:

    item_list_rs.xml

    这在 ListAdapter 中用于列表视图设计

    <?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;
        }
    
    }
    

    【讨论】:

    • 这个想法是我不想为列表项中的每个 textview 声明 android:textColor
    • 是的,对于列表项中的每个文本视图,我们可以定义不同的颜色...@JMRboosties
    【解决方案3】:

    实际上,您可以为所有应用程序或活动设置这样的 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>
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多