Java 调整微调器上的文本大小
选择项目时,我使用以下函数调整微调器上文本的大小:Java 调整微调器上的文本大小,java,android,text,size,spinner,Java,Android,Text,Size,Spinner,选择项目时,我使用以下函数调整微调器上文本的大小: mySpinner.post(new Runnable() { public void run() { mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterV
mySpinner.post(new Runnable()
{
public void run()
{
mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
{
TextView tempView = ((TextView) parent.getChildAt(0));
((TextView) parent.getChildAt(0)).setTextSize(TypedValue.COMPLEX_UNIT_PX, SetTextSize(tempView.getText().toString(), tempView.getWidth() - tempView.getPaddingLeft() - tempView.getPaddingRight(), (int) fieldHeight - tempView.getPaddingTop() - tempView.getPaddingBottom()));
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
// Do nothing
}
});
}
});
并添加了以下类:
public class MyArrayAdapter extends ArrayAdapter
{
public MyArrayAdapter(Context context, int textViewResourceId, Object[] objects)
{
super(context, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
((TextView) convertView).setTextSize(TypedValue.COMPLEX_UNIT_PX, SetTextSize(((TextView) convertView).getText().toString(), convertView.getWidth() - convertView.getPaddingLeft() - convertView.getPaddingRight(), (int) fieldHeight - convertView.getPaddingTop() - convertView.getPaddingBottom()));
return convertView;
}
}
class MySpinnerAdapter extends ArrayAdapter<String>
{
MySpinnerAdapter()
{
super(MainActivity.this, R.layout.row, R.id.label, CHOICES);
}
public View getView(int position, View convertView, ViewGroup parent)
{
View row = super.getView(position, convertView, parent);
TextView label = (TextView)row.findViewById(R.id.label);
if (label != null)
label.setTextSize(TypedValue.COMPLEX_UNIT_PX, SetTextSize(label.getText().toString(), label.getWidth() - label.getPaddingLeft() - label.getPaddingRight(), (int) fieldHeight - label.getPaddingTop() - label.getPaddingBottom()));
return(row);
}
}
不幸的是,现在我的程序在启动时立即崩溃
我创建了以下类:
public class MyArrayAdapter extends ArrayAdapter
{
public MyArrayAdapter(Context context, int textViewResourceId, Object[] objects)
{
super(context, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
((TextView) convertView).setTextSize(TypedValue.COMPLEX_UNIT_PX, SetTextSize(((TextView) convertView).getText().toString(), convertView.getWidth() - convertView.getPaddingLeft() - convertView.getPaddingRight(), (int) fieldHeight - convertView.getPaddingTop() - convertView.getPaddingBottom()));
return convertView;
}
}
class MySpinnerAdapter extends ArrayAdapter<String>
{
MySpinnerAdapter()
{
super(MainActivity.this, R.layout.row, R.id.label, CHOICES);
}
public View getView(int position, View convertView, ViewGroup parent)
{
View row = super.getView(position, convertView, parent);
TextView label = (TextView)row.findViewById(R.id.label);
if (label != null)
label.setTextSize(TypedValue.COMPLEX_UNIT_PX, SetTextSize(label.getText().toString(), label.getWidth() - label.getPaddingLeft() - label.getPaddingRight(), (int) fieldHeight - label.getPaddingTop() - label.getPaddingBottom()));
return(row);
}
}
其次,“row.xml”中的样式应用于我的微调器。如果我没有指定任何样式,那么我的程序就会崩溃。我只是不希望xml文件改变微调器的外观,因为我在编译时不知道。我希望微调器使用它在创建XML文件之前使用的默认值,以及我可以在代码中更改的任何其他内容。更改此代码
mySpinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, CHOICES));
mySpinner.setAdapter(新的ArrayAdapter(这个,android.R.layout.simple_spinner_dropdown_项目,选项));
到
mySpinner.setAdapter(新的ArrayAdapter(this,R.layout.spinner\u layout,CHOICES));
其中spinner_layout.xml的代码是
<?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:layout_width="fill_parent"
android:layout_height="48dp"
android:gravity="center_vertical"
android:textColor="@color/green"
android:paddingLeft="4dp"
android:textSize="18sp"
android:ellipsize="marquee"
android:singleLine="true" />
根据需要更改布局高度和文本大小我终于让微调器上的文本进行了完美的调整,我认为代码是有效的。感谢所有试图帮助的人。:)
类MySpinnerAdapter扩展了ArrayAdapter
{
MySpinnerAdapter(int-dropDownResource,字符串[]选项)
{
super(MainActivity.this、dropDownResource、choices);
}
公共视图getView(int位置、视图转换视图、视图组父视图)
{
视图行=转换视图;
if(行==null)
row=super.getView(位置、转换视图、父级);
if(parent.getWidth()>0)
{
TextView标签=(TextView)row.findViewById(android.R.id.text1);
label.setTextSize(TypedValue.COMPLEX_UNIT_PX,setTextSize(label.getText().toString(),parent.getWidth()-label.getPaddingLeft()-label.getPaddingRight(),(int)fieldHeight-label.getPaddingTop()-label.getPaddingBottom());
label.setPadding(label.getPaddingLeft(),0,0,0);
}
返回(行);
}
}
您可以试试我的anser,因为我没有使用XML,所以它不起作用。我不知道如何使XML动态工作,所以我不能使用它。我不可能根据我在XML中的需要设置布局高度和文本大小。直到运行时,我才知道布局高度和文本大小。如果我必须使用XML,我不希望我的XML对我的样式有任何影响。也许我应该动态地编写XML文件,并使用默认情况下微调器附带的相同样式设置它。然后,我可以使用XML,但XML不会影响它的外观。我知道这违背了XML的目的,但我只想在选择一个项目时运行一行代码。我无法理解您需要什么。但是我想你应该知道你需要什么尺码我怎么知道我需要什么尺码?我正在使我的程序在尽可能多的设备上兼容,因此我需要根据屏幕的宽度和高度计算运行时的大小。这行代码完美地计算了文本大小:((TextView)parent.getChildAt(0)).setTextSize(TypedValue.COMPLEX_UNIT_PX,setTextSize(tempView.getText().toString(),tempView.getWidth()-tempView.getPaddingLeft()-tempView.getPaddingRight(),(int)fieldHeight-tempView.getPaddingTop()-tempView.getPaddingBottom());
mySpinner.setAdapter(new ArrayAdapter<String>(this, R.layout.spinner_layout, CHOICES));
<?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:layout_width="fill_parent"
android:layout_height="48dp"
android:gravity="center_vertical"
android:textColor="@color/green"
android:paddingLeft="4dp"
android:textSize="18sp"
android:ellipsize="marquee"
android:singleLine="true" />
class MySpinnerAdapter extends ArrayAdapter<String>
{
MySpinnerAdapter(int dropDownResource, String[] choices)
{
super(MainActivity.this, dropDownResource, choices);
}
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
if (row == null)
row = super.getView(position, convertView, parent);
if (parent.getWidth() > 0)
{
TextView label = (TextView) row.findViewById(android.R.id.text1);
label.setTextSize(TypedValue.COMPLEX_UNIT_PX, SetTextSize(label.getText().toString(), parent.getWidth() - label.getPaddingLeft() - label.getPaddingRight(), (int) fieldHeight - label.getPaddingTop() - label.getPaddingBottom()));
label.setPadding(label.getPaddingLeft(), 0, 0, 0);
}
return(row);
}
}