在Android中居中显示祝酒词中的文本
我想知道是否有一种方法可以将祝酒词中的所有文本显示在中间。例如,我有一个祝酒词,里面有两行文字。出于纯粹的美学原因,我希望文本居中对齐,而不是左对齐。我查阅了文档,找不到任何关于它的信息。有没有一个我错过的简单方法 谢谢在Android中居中显示祝酒词中的文本,android,text,alignment,center,toast,Android,Text,Alignment,Center,Toast,我想知道是否有一种方法可以将祝酒词中的所有文本显示在中间。例如,我有一个祝酒词,里面有两行文字。出于纯粹的美学原因,我希望文本居中对齐,而不是左对齐。我查阅了文档,找不到任何关于它的信息。有没有一个我错过的简单方法 谢谢 Chris使用Toast的设置视图(视图)功能提供带有重力的视图。Toast的中心构建在文本视图上,默认重力是左对齐的。因此,您需要创建自己的文本视图,例如: <TextView android:layout_width="fill_parent"
Chris使用Toast的
设置视图(视图)
功能提供带有重力的视图。Toast的中心构建在文本视图上,默认重力是左对齐的。因此,您需要创建自己的文本视图,例如:
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical|center_horizontal"
android:text="all the text you want"
/>
这是肮脏的黑客,但是
((TextView)((LinearLayout)toast.getView()).getChildAt(0))
.setGravity(Gravity.CENTER_HORIZONTAL);
改编自:
并不是说findViewById(android.R.id.message)
是错误的,但为了防止(未来?)实现上的差异,我自己使用了一种稍微不同的方法:
void centerText(View view) {
if( view instanceof TextView){
((TextView) view).setGravity(Gravity.CENTER);
}else if( view instanceof ViewGroup){
ViewGroup group = (ViewGroup) view;
int n = group.getChildCount();
for( int i = 0; i<n; i++ ){
centerText(group.getChildAt(i));
}
}
}
没有黑客:
String text = "Some text";
Spannable centeredText = new SpannableString(text);
centeredText.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER),
0, text.length() - 1,
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
Toast.makeText(getActivity(), centeredText, Toast.LENGTH_LONG).show();
除中心线外,还有其他路线
此变化与使用线性布局有关:
toast most be center的简单代码对我来说很有用:
Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER| Gravity.BOTTOM, 0, 20);
toast.show();
在科特林中:
fun makeToast(context: Context, resId: Int) {
val toast = Toast.makeText(context, resId, Toast.LENGTH_SHORT)
val view = toast.view.findViewById<TextView>(android.R.id.message)
view?.let {
view.gravity = Gravity.CENTER
}
toast.show()
}
funmaketoos(上下文:context,resId:Int){
val toast=toast.makeText(上下文、剩余、toast.LENGTH\u SHORT)
val view=toast.view.findviewbyd(android.R.id.message)
风景?让我看看{
view.gravity=gravity.CENTER
}
吐司
}
这不是文本的中心,而是祝酒词本身。太好了!确保你周围有一个ClassCastException
catch,以防将来祝酒的视图层次发生变化。这在我的Nexus 4上有效。我建议这样做,如Max Howell所说,用ClassCastException包装它,然后在它抛出实际异常时使用它。在toast.getView()返回的视图上使用findViewById(android.R.id.message)以确保所有版本上的代码都能正常工作这是一个黑客解决方案,在未来的android版本中可能无法工作,例如,如果第一个子对象不是TextView。不遵循Java编码标准。欢迎使用SO。请看一下这本书。如前所述,您的代码格式不正确,不包含解释。很抱歉,您的代码将重心设置为烤面包片(显示在中间屏幕),而不是文本为什么默认重心不是gravity.center?愚蠢的机器人!这是正确的解决方案-对我有效。但对我无效。文本仍然向左对齐。这对我也不适用。API<23如何?这有关系吗?这是不推荐的,有解决办法吗?
Toast t = Toast.makeText(context, msg,Toast.LENGTH_SHORT);
centerText(t.getView());
t.show();
String text = "Some text";
Spannable centeredText = new SpannableString(text);
centeredText.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER),
0, text.length() - 1,
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
Toast.makeText(getActivity(), centeredText, Toast.LENGTH_LONG).show();
Toast SampleToast = Toast.makeText(this, "This is the example of centered text.\nIt is multiline text.", Toast.LENGTH_SHORT);
LinearLayout OurLayout = (LinearLayout) SampleToast.getView();
if (OurLayout.getChildCount() > 0)
{
TextView SampleView = (TextView) OurLayout.getChildAt(0);
SampleView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
}
SampleToast.show();
Toast t=Toast.makeText(getApplicationContext(),"Text",Toast.LENGTH_LONG);
t.setText("Password Does't match...");
t.setGravity(0, 0, 0);
t.show();
Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER| Gravity.BOTTOM, 0, 20);
toast.show();
fun makeToast(context: Context, resId: Int) {
val toast = Toast.makeText(context, resId, Toast.LENGTH_SHORT)
val view = toast.view.findViewById<TextView>(android.R.id.message)
view?.let {
view.gravity = Gravity.CENTER
}
toast.show()
}