내부에 ListView가있는 두 개의 레이아웃이 있습니다.
각 ListView에는 일부 TextViews 및 기타 요소가 포함되어 있습니다.
(Android Studio에서) 편집하는 동안 모든 텍스트 뷰가 검정색 텍스트로 표시됩니다.
하지만 내 애플 리케이션을 실행하면 ListView 하나에는 검은 색 TextView가 있고 다른 하나에는 흰색이있다.
차이점은 무엇입니까?
색상이 대체 된 위치는 어디입니까?TextView 텍스트 색상
기본보기 (흑백 텍스트 색상) :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:layout_width="match_parent"
android:layout_height="0dp"
android:id="@+id/services"
android:layout_weight="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/services_total"
android:id="@+id/total"
/>
</LinearLayout>
목록 항목 :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1">
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/service_title"
android:id="@+id/serviceItemTitle"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/service_cost"
android:id="@+id/serviceItemCost"
/>
</LinearLayout>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/serviceItemSelector"
android:layout_gravity="center_vertical"
android:checked="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"/>
</LinearLayout>
문제있는보기 (흰색 텍스트 색상) :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/appointments"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!--
This TextView here is just for testing.
It has black color while running.
So it seems that the problem is in ListView
-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/textView4"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
,
목록 항목 :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1">
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title_unknown"
android:textAppearance="?android:attr/textAppearanceLarge"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/appointment_cost"
android:id="@+id/cost"/>
</LinearLayout>
<TextView
android:id="@+id/dateTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/date_unknown"
android:layout_gravity="center_vertical"
android:textAppearance="?android:attr/textAppearanceLarge"/>
</LinearLayout>
UPDATE (어댑터) : 흰색 TextViews와 ListView에 대한
public class Services extends ArrayAdapter<Service> {
public Services (Context context, List<Service> services) {
super(context, 0, services);
}
@Override
public View getView (int position, View convertView, ViewGroup parent) {
Service service = getItem(position);
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.appointment_service_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.title = convertView.findViewById(R.id.serviceItemTitle);
viewHolder.cost = convertView.findViewById(R.id.serviceItemCost);
viewHolder.selector = convertView.findViewById(R.id.serviceItemSelector);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
((TextView) viewHolder.title).setText(service.title);
String cost = new DecimalFormat("#.##").format(service.price);
((TextView) viewHolder.cost).setText(String.format(getContext().getString(R.string.service_cost), cost));
((CheckBox) viewHolder.selector).setChecked(service.isSelected);
return convertView;
}
private static class ViewHolder {
View title;
View cost;
View selector;
}
}
어댑터 : 블랙 TextViews와 ListView에 대한
어댑터 :
public class History extends ArrayAdapter<Appointment> {
public History (Context context, List<Appointment> appointments) {
super(context, 0, appointments);
}
@Override
public View getView (int position, View convertView, ViewGroup parent) {
Appointment appointment = getItem(position);
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.history_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.title = convertView.findViewById(R.id.title);
viewHolder.cost = convertView.findViewById(R.id.cost);
viewHolder.dateTime = convertView.findViewById(R.id.dateTime);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
((TextView) viewHolder.title).setText(appointment.carwash.title);
float cost = 0;
for (Service service : appointment.services) {
if (service.isSelected) {
cost += service.price;
}
}
((TextView) viewHolder.cost).setText(String.format(
getContext().getString(R.string.appointment_cost),
new DecimalFormat("#.##").format(cost)
));
Calendar calendar = new GregorianCalendar();
calendar.setTime(appointment.date);
((TextView) viewHolder.dateTime).setText(...calendar conversions here...);
return convertView;
}
private static class ViewHolder {
View title;
View cost;
View dateTime;
}
}
기기 및 에뮬레이터에서 사용되는 Android OS 버전 및 테마에 따라 다릅니다. – Yugesh
리스트 어댑터를 보여주세요. –
@Amrola, 어댑터로 질문을 업데이트했습니다. – seelts