我遇到了一个我无法自行解决的问题。 我试图在最近两天找到解决方案,谷歌搜索,在这个网站上阅读答案,玩代码,但失败了......
我正在创建一个覆盖弹出窗口,我的服务将显示任何打开的应用程序(如Facebook ChatHead)。一切都有效,除了一件事:
我刚刚注册,因此我没有足够的声誉来附加图片,这里是the link to the screenshot。
最右边的TextView(用红色箭头显示)收缩,我们只看到" R"而不是" RND"。
这是RelativeLayout:
<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
)minWidth
,minEms
属性layout_width
属性设置为固定的dp值而不是wrap_contents
layout_width
属性设置为固定的1000dp值,而不是wrap_contents
没有任何帮助,我仍然看到&#34; R&#34;而不是&#34; RND&#34;。有人能告诉我我做错了什么吗?
P.S。我不能做一个常见的TextView而不是7,因为我需要分别控制它们的风格。
我没有足够的声誉来添加两个以上的链接,因此我将屏幕截图放入zip-file。 那么,我做了什么:
首先,我已经完成了@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"/>
我从截图&#34; option1&#34;得到了结果。如您所见,元素之间的填充太小,所有TextView都缩小为2个字母。
接下来,我尝试将所有android:layout_width="0dp"
替换为android:layout_width:"wrap_content"
。
结果是&#34; option2&#34;截图 - 文本未被剪切,但元素之间根本没有填充。
之后,我已将android:paddingLeft="30dp"
添加到除第一个(tvIconRDS
)之外的所有TextView中。我还在android:paddingRight="15dp"
TextView中添加了tvIconRDM
。
结果(&#34; option3&#34;屏幕截图)最接近所需的结果,除了&#34; RDS&#34;左边没有填充。
但是,当我尝试将android:paddingLeft="15dp"
或android:layout_marginLeft="15dp"
添加到tvIconRDS
TextView,甚至android:paddingLeft="15dp"
添加到llIcons
LinearLayout时,我得到以下结果:&#34; option4&#34;屏幕截图。
所以,最合适的选项是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>
答案 0 :(得分:1)
也许,这是因为您在每个TexView android:paddingLeft="30dp
中使用?您应该使用layout_weight
参数,并将其设置为android:layout_weight="1
到每个TextView。您可以查看此tutorial,有几个使用权重参数的示例。
答案 1 :(得分:0)
我终于设法使用TableLayout来完成它。请参阅&#34;更新二&#34;在我的问题文本中。 Here is the result