【问题标题】:Android TextView Left Align and Right Align Text on the Same LineAndroid TextView 左对齐和右对齐文本在同一行
【发布时间】:2017-02-05 07:41:27
【问题描述】:

我需要在同一行创建TextView左对齐和右对齐文本,并像这样输出。我正在使用 HTML 文本或属性 Left Text 和 Right Text 来搜索解决方案,例如方法 setCompoundDrawables

这是当前输出

这是当前代码

PackageInfo packageInfo = (PackageInfo) getItem(position);
Drawable appIcon = packageManager.getApplicationIcon(packageInfo.applicationInfo);
int inPixels= (int) context.getResources().getDimension(R.dimen.iconsize);
appIcon.setBounds(0, 0, inPixels, inPixels);
holder.apkName.setCompoundDrawables(appIcon, null, null, null);
holder.apkName.setCompoundDrawablePadding(15);

String appName = packageManager.getApplicationLabel(packageInfo.applicationInfo).toString();
Date date=new Date(packageInfo.firstInstallTime);
SimpleDateFormat df2 = new SimpleDateFormat("dd.MM.yyyy");
String dateText = df2.format(date);
holder.apkName.setText(Html.fromHtml("<b>"+appName+"</b>("+dateText+")"));

【问题讨论】:

  • 您能详细说明一下吗?
  • Android TextView 左对齐和右对齐文本在同一行
  • 哦,所以你想让文本在左角和右角一样吗?
  • 是的,你说得对
  • @Charuක 感谢您的问题改进

标签: android android-layout text-alignment


【解决方案1】:

如果您试图避免创建单独的TextView,那么您可能需要使用SpannableString

我认为,解决方案演示here

您可能会通过this link获得更多想法

【讨论】:

  • 最终字符串 resultText = LeftText + " " + RightText;最终 SpannableString styledResultText = new SpannableString(resultText); styledResultText.setSpan((new AlignmentSpan.Standard(Alignment.ALIGN_OPPOSITE), LeftText.length() + 2, LeftText.length() + 2 +RightText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); resultTextView.setText(styledResultText);
  • 在帖子中存在一些错误等,但想法 SpannableString 帮助了我。谢谢!
  • 很高兴知道它有帮助!
【解决方案2】:

这就是使用 SpannableString 后的样子。这就是我想要的。谢谢!

最后的代码是:

PackageInfo packageInfo = (PackageInfo) getItem(position);
Drawable appIcon = packageManager.getApplicationIcon(packageInfo.applicationInfo);
int inPixels= (int) context.getResources().getDimension(R.dimen.iconsize);
appIcon.setBounds(0, 0, inPixels, inPixels);
holder.apkName.setCompoundDrawables(appIcon, null, null, null);
holder.apkName.setCompoundDrawablePadding(15);

String appName = packageManager.getApplicationLabel(packageInfo.applicationInfo).toString();
Date date=new Date(packageInfo.firstInstallTime);
SimpleDateFormat df2 = new SimpleDateFormat("dd.MM.yyyy");
String dateText = df2.format(date);
String LeftText=appName;
String RightText=dateText;
final String resultText = LeftText + "\n" + RightText;
final SpannableString styledResultText = new SpannableString(resultText);
styledResultText.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_OPPOSITE), LeftText.length() , LeftText.length() +RightText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.apkName.setText(styledResultText);

【讨论】:

    【解决方案3】:

    使用两个 textViews 会给你结果: 这是一个例子:

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:weight="1"
            android:gravity="left"
            android:text="Text on the Left" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:weight="1"
            android:gravity="right"
            android:text="Text on the Right" />
    </LinearLayout>
    

    【讨论】:

    • @Hey Krunal 您的代码有错误。如果您使用的是 weightSum,则无需为孩子设置layuot_width,只需将其设为 0dp 或不设置 weightSum
    • @UmeshSonawane 我试过了,这很有效。有很多方法可以获得所需的输出。
    • 我不是说它不起作用我只是想告诉你如果你设置了 layout_width 那么就没有使用 weightSum
    • 是的,去掉 weightSum 就可以了。
    猜你喜欢
    • 1970-01-01
    • 2019-01-21
    • 2023-03-31
    • 2015-01-09
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多