我在整个应用程序中使用了一个主题,在主题中,文本颜色简单地声明为:
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;
}
答案 0 :(得分:6)
这是因为您使用ListView
Context
(Application
或其他衍生产品)的LayoutInflater.from(getApplicationContext());
来扩充Activity
的行布局,而不是使用您的{ {1}} Context
。
您将从getApplicationContext()
和Activity.this
获得的上下文之间的区别在于Context
对其中任何一个的实现。
Context
,Application
的{{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>
并将主题设置为您的活动主题。