gpt4 book ai didi

android - 单行 TextView 剪切 LinearLayout 内的文本

转载 作者:行者123 更新时间:2023-11-30 02:17:01 25 4
gpt4 key购买 nike

我有一个我自己无法解决的问题。在过去的两天里,我试图找到解决方案,谷歌搜索,阅读这个网站上的答案,玩代码,但失败了......

我正在制作一个覆盖弹出窗口,我的服务将在任何打开的应用程序(如 Facebook ChatHead)上方显示。一切正常,除了一件事:
我刚刚注册,所以我没有足够的声誉来附加图像,这里是 the link to the screenshot .
最右边的 TextView(用红色箭头显示)缩小了,我们只看到“R”而不是“RND”。

这是相对布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout
android:id="@+id/llIcons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="5pt"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/tvIconRDS"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:maxLines="1"
android:paddingLeft="30dp"
android:text="RDS"
android:textSize="30sp"/>
<TextView
android:id="@+id/tvIconAS"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:maxLines="1"
android:paddingLeft="30dp"
android:text="AS"
android:textSize="30sp"/>
<TextView
android:id="@+id/tvIconTP"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:maxLines="1"
android:paddingLeft="30dp"
android:text="TP"
android:textSize="30sp"/>
<TextView
android:id="@+id/tvIconREG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:maxLines="1"
android:paddingLeft="30dp"
android:text="REG"
android:textSize="30sp"/>
<TextView
android:id="@+id/tvIconCDin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:maxLines="1"
android:paddingLeft="30dp"
android:text="CD in"
android:textSize="30sp"/>
<TextView
android:id="@+id/tvIconMP3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:maxLines="1"
android:paddingLeft="30dp"
android:text="MP3"
android:textSize="30sp"/>
<TextView
android:id="@+id/tvIconRDM"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:maxLines="1"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:text="RDM"
android:minEms="20"
android:textSize="30sp"/>
</LinearLayout>
<TextView
android:id="@+id/tvText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/llIcons"
android:layout_centerHorizontal="true"
android:layout_margin="7dp"
android:ellipsize="marquee"
android:focusable="true"
android:gravity="center_horizontal"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:textSize="50sp"/>
</RelativeLayout>

下面是扩展此布局并将其添加到 WindowManager 的代码:

WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutInflater layoutInflater = LayoutInflater.from(this);
float displayDensity = getResources().getDisplayMetrics().density;
int popupMargin = (int) (20 * displayDensity + 0.5f);
WindowManager.LayoutParams popupParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT);
popupParams.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
popupParams.y = popupMargin;
rlPopup = (RelativeLayout) layoutInflater.inflate(R.layout.overflow_popup, null);
rlPopup.setBackgroundResource(R.drawable.overflow_popup_shape);
windowManager.addView(rlPopup, popupParams);

我已经尝试过以下方法:

  • 使用 android:layout_marginLeft (android:layout_marginRight) 而不是 android:paddingLeft (android:paddingRight)
  • 为所有图标 TextView 设置 minWidthminEms 属性
  • 将所有图标 TextView 的 layout_width 属性设置为固定 dp 值而不是 wrap_contents
  • 将 llIcons LinearLayout 的 layout_width 属性设置为固定的 1000dp 值而不是 wrap_contents
  • 将 LinearLayout 更改为 RelativeLayout(对子元素进行相应更改)

没有任何帮助,我仍然看到“R”而不是“RND”。有人可以告诉我我做错了什么吗?

附言我不能做一个普通的 TextView 而不是 7 个,因为我需要分别控制它们的样式。

更新一

我没有足够的声誉来添加两个以上的链接,所以我将屏幕截图放入 zip-file 中.
所以,我做了什么:

  1. 首先,我按照@Lamorak 的建议做了,结果得到了以下 XML:

    <LinearLayout
    android:id="@+id/llIcons"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="5pt"
    android:gravity="center"
    android:orientation="horizontal">

    <TextView
    android:id="@+id/tvIconRDS"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="center_horizontal"
    android:maxLines="1"
    android:text="RDS"
    android:textSize="30sp"/>

    <TextView
    android:id="@+id/tvIconAS"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="center_horizontal"
    android:maxLines="1"
    android:text="AS"
    android:textSize="30sp"/>

    <TextView
    android:id="@+id/tvIconTP"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="center_horizontal"
    android:maxLines="1"
    android:text="TP"
    android:textSize="30sp"/>

    <TextView
    android:id="@+id/tvIconREG"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="center_horizontal"
    android:maxLines="1"
    android:text="REG"
    android:textSize="30sp"/>

    <TextView
    android:id="@+id/tvIconCDin"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="center_horizontal"
    android:maxLines="1"
    android:text="CD in"
    android:textSize="30sp"/>

    <TextView
    android:id="@+id/tvIconMP3"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="center_horizontal"
    android:maxLines="1"
    android:text="MP3"
    android:textSize="30sp"/>

    <TextView
    android:id="@+id/tvIconRDM"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="center_horizontal"
    android:maxLines="1"
    android:text="RDM"
    android:textSize="30sp"/>
    </LinearLayout>

    <TextView
    android:id="@+id/tvText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/llIcons"
    android:layout_centerHorizontal="true"
    android:layout_margin="7dp"
    android:ellipsize="marquee"
    android:focusable="true"
    android:gravity="center_horizontal"
    android:marqueeRepeatLimit="marquee_forever"
    android:scrollHorizontally="true"
    android:singleLine="true"
    android:textSize="50sp"/>

    我从屏幕截图“option1”中得到了结果。如您所见,元素之间的填充太小,所有 TextView 都缩小为 2 个字母。

  2. 接下来,我尝试将所有 android:layout_width="0dp" 替换为 android:layout_width:"wrap_content"
    结果在“选项 2”屏幕截图上 - 文本未被剪切,但元素之间根本没有填充。

  3. 之后,我将 android:paddingLeft="30dp" 添加到除第一个 (tvIconRDS) 之外的所有 TextView。我还添加了 android:paddingRight="15dp"tvIconRDM TextView。结果(“选项 3”屏幕截图)最接近所需结果,除了“RDS”左侧没有填充。

  4. 但是当我尝试将 android:paddingLeft="15dp"android:layout_marginLeft="15dp" 添加到 tvIconRDS 时 TextView,甚至 android:paddingLeft="15dp"llIcons LinearLayout,我得到以下结果:“option4”截图。

    <

那么,最合适的选项是数字 3,但是如何为第一个图标创建 15dp 的左内边距呢?

更新二

现在可以了!最后我设法使用 TableLayout 做到了:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<TableLayout
android:id="@+id/tlIcons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:stretchColumns="*">

<TableRow android:paddingTop="5dp">

<TextView
android:id="@+id/tvIconRDS"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:gravity="center_horizontal"
android:maxLines="1"
android:text="@string/rds_icon"
android:textSize="30sp"/>

<TextView
android:id="@+id/tvIconAS"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:gravity="center_horizontal"
android:maxLines="1"
android:text="@string/as_icon"
android:textSize="30sp"/>

<TextView
android:id="@+id/tvIconTP"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:gravity="center_horizontal"
android:maxLines="1"
android:text="@string/tp_icon_on"
android:textSize="30sp"/>

<TextView
android:id="@+id/tvIconREG"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:gravity="center_horizontal"
android:maxLines="1"
android:text="@string/reg_icon"
android:textSize="30sp"/>

<TextView
android:id="@+id/tvIconCDin"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:gravity="center_horizontal"
android:maxLines="1"
android:text="@string/cdin_icon"
android:textSize="30sp"/>

<TextView
android:id="@+id/tvIconMP3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:gravity="center_horizontal"
android:maxLines="1"
android:text="@string/mp3_icon"
android:textSize="30sp"/>

<TextView
android:id="@+id/tvIconRDM"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:gravity="center_horizontal"
android:maxLines="1"
android:text="@string/rdm_icon"
android:textSize="30sp"/>
</TableRow>

<TableRow
android:paddingBottom="10dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:paddingTop="5dp">

<TextView
android:id="@+id/tvEHUText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_span="7"
android:ellipsize="marquee"
android:focusable="true"
android:gravity="center_horizontal"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:textSize="50sp"/>
</TableRow>
</TableLayout>

</RelativeLayout>

最佳答案

也许,这是因为你在每个 TexView 中都使用 android:paddingLeft="30dp?你应该使用 layout_weight 参数,并将其设置为 android :layout_weight="1 到每个 TextView。你可以看看这个tutorial , 有几个使用权重参数的例子。

关于android - 单行 TextView 剪切 LinearLayout 内的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29133975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com