스피너 텍스트 크기와 텍스트 색상을 변경하는 방법은 무엇입니까?
내 Android 응용 프로그램에서 스피너를 사용하고 있으며 SQLite 데이터베이스의 데이터를 스피너에로드했으며 제대로 작동합니다. 그 코드는 다음과 같습니다.
Spinner spinner = (Spinner) this.findViewById(R.id.spinner1);
List<String> list = new ArrayList<String>();
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item, list);
cursor.moveToFirst();
list.add("All Lists");
if (cursor.getCount() > 0) {
for (int i = 0; i < cursor.getCount(); i++) {
keyList[i] = cursor.getString(cursor.getColumnIndex(AndroidOpenDbHelper.KEYWORD));
list.add(keyList[i]);
cursor.moveToNext();
}
}
Database.close();
cursor.close();
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter);
이제 스피너 데이터의 텍스트 색상과 텍스트 크기를 변경하고 싶습니다. XML 파일의 스피너 태그에 다음 XML 행을 사용했지만 작동하지 않습니다.
android:textColor="@android:color/white"
android:textSize="11dp"
스피너의 텍스트 색상과 텍스트 크기를 어떻게 변경합니까?
스피너 항목에 대한 사용자 지정 XML 파일을 만듭니다.
spinner_item.xml :
이 파일에서 텍스트에 사용자 정의 된 색상과 크기를 제공하십시오.
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:gravity="left"
android:textColor="#FF0000"
android:padding="5dip"
/>
이제이 파일을 사용하여 다음과 같은 스피너 항목을 표시하십시오.
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item,list);
드롭 다운 리소스를 설정할 필요가 없습니다. spinner_item.xml
항목을 스피너에 표시하는 데만 소요 됩니다.
간단하고 또렷한 ... :
private OnItemSelectedListener OnCatSpinnerCL = new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
((TextView) parent.getChildAt(0)).setTextColor(Color.BLUE);
((TextView) parent.getChildAt(0)).setTextSize(5);
}
public void onNothingSelected(AdapterView<?> parent) {
}
};
모든 스피너가 TextView 항목에 대해 동일한 텍스트 색상을 가질 수있는 경우 다른 방법은 스피너 드롭 다운 항목에 사용자 정의 스타일을 사용하는 것입니다.
에서 res/values/styles.xml
:
<resources>
<style name="AppBaseTheme" parent="android:Theme.Light">
</style>
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:spinnerDropDownItemStyle">@style/mySpinnerItemStyle</item>
</style>
<style name="mySpinnerItemStyle" parent="@android:style/Widget.Holo.DropDownItem.Spinner">
<item name="android:textColor">@color/my_spinner_text_color</item>
</style>
</resources>
res / values / colors.xml에서 사용자 정의 색상을 정의하십시오.
<color name="my_spinner_text_color">#808080</color>
Spinner의 색상 을 변경하는 데 도움이되는 링크는 다음과 같습니다 .
<Spinner
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/spinner"
android:textSize="20sp"
android:entries="@array/planets"/>
spinner 항목 spinner_item.xml에 대한 사용자 정의를 사용하여 고유 한 레이아웃 파일을 작성해야합니다 .
<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:textSize="20sp"
android:textColor="#ff0000" />
드롭 다운 목록 항목을 사용자 정의하려면 새 레이아웃 파일을 작성해야합니다. spinner_dropdown_item.xml :
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:maxLines="1"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:ellipsize="marquee"
android:textColor="#aa66cc"/>
그리고 마지막으로 스피너 선언의 또 다른 변화 :
ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
R.array.planets_array, R.layout.spinner_item);
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
spinner.setAdapter(adapter);
그게 다야.
android.support.v7.widget.AppCompatSpinner로 작업하는 경우 스타일을 사용하여 가장 간단한 테스트 솔루션이 있습니다.
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/spefcialFx"
style="@style/Widget.AppCompat.Spinner.Underlined"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:theme="@style/Spinner"
android:entries="@array/special_fx_arrays"
android:textSize="@dimen/text_size_normal"></android.support.v7.widget.AppCompatSpinner>
그리고 스타일 :
<style name="Spinner" parent="Widget.AppCompat.Light.DropDownItem.Spinner">
<item name="android:paddingStart">0dp</item>
<item name="android:paddingEnd">0dp</item>
<item name="android:textColor">@color/white</item>
<item name="android:backgroundTint">@color/red</item>
<item name="android:textSize">14sp</item>
</style>
유일한 단점은 android : backgroundTint가 드롭 다운 화살표와 드롭 다운 배경 모두에 대해 색상을 설정한다는 것입니다.
지연을 방지하려면 onItemSelected
리스너뿐만 아니라 Activity의 onCreate
메소드 에서도 텍스트 속성을 설정해야합니다 (그러나 약간 까다 롭습니다).
특히, onCreate
어댑터를 설정 한 후 이것을 넣어야합니다 .
spinner.setSelection(0, true);
View v = spinner.getSelectedView();
((TextView)v).setTextColor(backgroundColor);
그리고 이것을 넣습니다 onItemSelected
.
((TextView) view).setTextColor(backgroundColor);
전체 예는 다음과 같습니다.
@Override
protected void onCreate(Bundle savedInstanceState)
{
Spinner spinner = (Spinner) findViewById(R.id.spinner);
//Set the choices on the spinner by setting the adapter.
spinner.setAdapter(new SpinnerAdapter(toolbar.getContext(), new String[]{"Overview", "Story", "Specifications", "Poll", "Video"}, accentColor, backgroundColor));
//Set the text color of the Spinner's selected view (not a drop down list view)
spinner.setSelection(0, true);
View v = spinner.getSelectedView();
((TextView)v).setTextColor(backgroundColor);
//Set the listener for when each option is clicked.
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
//Change the selected item's text color
((TextView) view).setTextColor(backgroundColor);
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
});
}
자세한 내용은 내 질문을 참조하십시오 .
선택한 항목에서만 텍스트 색상을 변경하려면 가능한 해결 방법이 될 수 있습니다. 그것은 나를 위해 일했고 당신을 위해 일해야합니다.
spinner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
((TextView) spinner.getSelectedView()).setTextColor(Color.WHITE);
}
});
작은 크기를 얻기 위해 사용자 정의 레이아웃을 만드는 대신 스피너에 Android의 내부 소형 레이아웃을 사용하려면 다음을 사용해야합니다.
"android.R.layout.simple_spinner_item"대신 "android.R.layout.simple_gallery_item".
ArrayAdapter<CharSequence> madaptor = ArrayAdapter
.createFromResource(rootView.getContext(),
R.array.String_visitor,
android.R.layout.simple_gallery_item);
스피너의 레이아웃 크기를 줄일 수 있습니다. 간단한 트릭입니다.
드롭 다운 목록의 크기를 줄이려면 다음을 사용하십시오.
madaptor.setDropDownViewResource(android.R.layout.simple_gallery_item);
DrowDownIcon
색 을 바꾸고 싶은 사람 은 이렇게 사용할 수 있습니다
spinner.getBackground().setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.SRC_ATOP);
만하면 사람을 Style
위한 방법 AppCompat
.
styles.xml
<resources>
...
<style name="Spinner" parent="Widget.AppCompat.Light.DropDownItem.Spinner">
<item name="android:paddingStart">0dp</item>
<item name="android:paddingEnd">0dp</item>
<item name="android:textColor">@color/material_grey_700</item>
<item name="android:textSize">12sp</item>
</style>
</resources>
your_spinner_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" />
...
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/content_spinner"
style="@style/Widget.AppCompat.Spinner.Underlined"
android:layout_width="140dp"
android:layout_height="wrap_content"
android:entries="@array/shipping_tracking_carrier_names"
android:spinnerMode="dropdown"
android:theme="@style/Spinner" />
<EditText
android:id="@+id/content_input"
android:layout_width="140dp"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"
android:paddingEnd="8dp"
android:paddingStart="8dp"
android:textColor="@color/material_grey_700"
android:textSize="12sp" />
...
</LinearLayout>
또한 정의 된 스타일로 프로그래밍 방식으로
설정하려는 경우 android:entries
.
이 시도.
AppCompatSpinner spinner = findViewById(R.id.content_spinner);
CharSequence[] entries = getResources().getTextArray(R.array.shipping_tracking_carrier_names);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<>(spinner.getContext(), android.R.layout.simple_spinner_item, entries);
adapter.setDropDownViewResource(android.support.v7.appcompat.R.layout.support_simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
코드에서와 같이를 사용 Context
하는 Spinner
것이 가장 중요합니다.
spinner.getContext()
android.R.layout 리소스를 재사용 / 변경하는 가장 쉬운 방법은 정의를 따르는 것입니다. Android Studio에서는 android.R.layout.simple_spinner_item.xml에서 Ctrl+ B를 수행하십시오 .
리소스 파일로 이동합니다. 리소스 파일을 복사하고 Package.R.layout 폴더에 새 레이아웃을 추가하고 원하는대로 textview의 textColor를 변경 한 다음 다음과 같이 어댑터에서 호출하십시오.
ArrayAdapter<String> adapter = new ArrayAdapter<String(Context,R.layout.spinner_item, spinnerlist);
스피너 텍스트의 색상을 변경하려면
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE);}
다음과 같이 getView 메소드를 대체하여 텍스트 색상을 변경할 수 있습니다.
new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, list()){
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
View view = super.getView(position, convertView, parent);
//change the color to which ever you want
((CheckedTextView) view).setTextColor(Color.RED);
//change the size to which ever you want
((CheckedTextView) view).setTextSize(5);
//for using sp values use setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
return view;
}
}
가장 간단한 방법 : 저에게 효과적입니다
TextView spinnerText = (TextView) spinner.getChildAt(0);
spinnerText.setTextColor(Color.RED);
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#fff"
android:ellipsize="marquee"
android:textAlignment="inherit"/>
그냥 이것을 사용하십시오 :
ArrayAdapter<String> adapter_category = new ArrayAdapter<String>(this,
R.layout.spinner_list_item, categories);
adapter_category
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Ashraf 솔루션의 또 다른 변형은 화면 크기를 고려하는 것입니다. 어댑터를 설정 한 후 onCreate에서 스피너를 가져 와서 리스너를 설정해야합니다.
//set your adapter with default or custom spinner cell, then://
serverSpinner.setOnItemSelectedListener(spinnerSelector);
serverSpinner.setSelection(defaultServer);
그런 다음 스피너를 클릭하기 전에 표시되는 뷰의 텍스트 크기 변경을 시작할 수 있습니다.
private AdapterView.OnItemSelectedListener spinnerSelector = new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
boolean largeTablet = getResources().getBoolean(R.bool.isLargeTablet);
if (tabletSize) { ((TextView)parent.getChildAt(0)).setTextSize(16); }
else if (largeTablet) { ((TextView)parent.getChildAt(0)).setTextSize(18); }
else { ((TextView)parent.getChildAt(0)).setTextSize(12); }
}
public void onNothingSelected(AdapterView<?> parent) {
}
};
다음과 같이 레이아웃 특정 폴더를 생성하기 만하면됩니다.
값 -sw360dp
값 -sw600dp
값-sw800dp
그런 다음 각 폴더에 "bool.xml"이라는 xml 파일을 추가하십시오.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="isTablet">false</bool>
<bool name="isLargeTablet">false</bool>
</resources>
먼저 아래와 같이 간단한 xml
리소스 파일 을 만들어야합니다 textview
.
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:gravity="left"
android:textColor="#FF0000"
android:padding="5dip"
/>
저장하십시오. 귀하의 adapterlist에 설정된 후.
간단한 방법을 원하면 드롭 다운에 항목을 추가하기 위해 보통 strings.xml에 항목을 추가하십시오. 다음은 strings.xml 파일을 사용하여 색상을 추가하는 방법에 대한 예입니다.
연령대 선택
<string-array name="age_array">
<item> 0-6 </item> //No custom colour
<item><font fgcolor='#FF4CD964'> 12+ </font></item> //With custom colour
</string-array>
getDropDownView () 및 getView () 메소드를 사용했습니다.
getDropDownView()
열린 스피너에 사용 합니다.
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.context_row_icon, null);
}
TextView mTitle = (TextView) view.findViewById(R.id.context_label);
ImageView flag = (ImageView) view.findViewById(R.id.context_icon);
mTitle.setText(values[position].getLabel(activity));
if (!((LabelItem) getItem(position)).isEnabled()) {
mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled));
} else {
mTitle.setTextColor(activity.getResources().getColor(R.color.context_item));
}
return view;
}
그리고 getView()
닫힌 스피너에 사용 합니다.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.context_row_icon, null);
}
TextView mTitle = (TextView) view.findViewById(R.id.context_label);
ImageView flag = (ImageView) view.findViewById(R.id.context_icon);
mTitle.setText(values[position].getLabel(activity));
mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled));
return view;
}
이러한 유형의 스피너 용 어댑터를 완전히 사용자 정의 할 수 있습니다.
ArrayAdapter<String> genderAdapter = new ArrayAdapter<String>(getActivity(), R.layout.spinner_text, genderList) {
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
((TextView) v).setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
((TextView) v).setTextColor(Color.parseColor("#676767"));
((TextView) v).setTypeface(vrFont);
return v;
}
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View v = super.getDropDownView(position, convertView, parent);
((TextView) v).setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
((TextView) v).setTypeface(vrFont);
((TextView) v).setTextColor(Color.parseColor("#676767"));
if (position == 0) {
((TextView) v).setTextColor(Color.parseColor("#979797"));
}
return v;
}
R.layout.spinner_text는 다음과 같습니다.
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text1"
style="?android:attr/spinnerItemStyle"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:gravity="center_vertical|left"
android:ellipsize="marquee"
android:maxLines="1"
android:textColor="@color/whiteThree" />
다음과 같이 새로운 스타일을 추가하십시오.
<style name="mySpinnerItemStyle" parent="ThemeOverlay.AppCompat.Dark">
<item name="android:textColor">#000</item>
<item name="android:color">#000</item>
</style>
그것을 사용하십시오 :
<Spinner
android:id="@+id/spinnerCategories"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/mySpinnerItemStyle"
android:layout_margin="5dp" />
이 방법을 시도하십시오. 나를 위해 일하고 있습니다.
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
TextView textView = (TextView) view;
((TextView) adapterView.getChildAt(0)).setTextColor(Color.RED);
((TextView) adapterView.getChildAt(0)).setTextSize(20);
Toast.makeText(this, textView.getText()+" Selected", Toast.LENGTH_SHORT).show();
}
참고 URL : https://stackoverflow.com/questions/9476665/how-to-change-spinner-text-size-and-text-color
'Programing' 카테고리의 다른 글
컬러 리소스에서 color-int 가져 오기 (0) | 2020.02.21 |
---|---|
언제 예외를 던지나요? (0) | 2020.02.21 |
윤곽 반경? (0) | 2020.02.21 |
끌어 오기 후 커밋 된 (그러나 푸시되지 않은) 변경 사항을 새 분기로 이동 (0) | 2020.02.21 |
AngularJS : 서비스 변수를 보는 방법? (0) | 2020.02.21 |