调整 LinearLayout 的溢出
Posted
技术标签:
【中文标题】调整 LinearLayout 的溢出【英文标题】:Adjusting overflow of a LinearLayout 【发布时间】:2014-04-16 15:55:49 【问题描述】:我在 RelativeLayout 中有一个简单的 LinearLayout,它可以动态添加自定义子视图。
<RelativeLayout
android:id="@+id/chart_main_panel"
android:layout_
android:layout_
android:layout_toLeftOf="@id/chart_right_panel" >
...
<LinearLayout
android:id="@+id/label_xAxis"
android:layout_
android:layout_
android:layout_above="@id/volume_lay"
android:paddingRight="@dimen/chart_right_padding"
android:clipChildren="true"
android:gravity="right"
android:orientation="horizontal">
</LinearLayout>
...
</RelativeLayout>
以下是扩展 TextView 的自定义子视图的属性。 (宽度和文本在添加到 LinearLayout 之前已更改。)
android:layout_
android:layout_
android:paddingTop="3dip"
android:gravity="center"
android:maxLines="1"
android:textSize="@dimen/axis_text_size">
当我水平缩小布局时,我希望子视图保留在 布局但从布局的左侧“滑出”,在其左边缘被剪裁(如溢出:隐藏在 css 中),右侧的视图保持它们的大小和相对于彼此和布局的相对位置。目前正在发生相反的情况,我找不到调整这种行为的简单方法。
*我有一张正在发生的事情的图片,但没有足够的代表来发布 - 抱歉。
【问题讨论】:
【参考方案1】:在四处寻找一个简单的方法来做到这一点毫无结果之后,我辞职了:
扩展一个 HorizontalScrollView 并覆盖它的 onLayout() 方法:
class HideHorizontalLeftOverflowWrapper extends HorizontalScrollView
...
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b)
super.onLayout(changed,l, t, r, b);
View wrappedView = super.getChildAt(0);
if( wrappedView != null)
super.scrollTo(wrappedView.getWidth(), 0);
用它包装 LinearLayout:
<com...HideHorizontalLeftOverflowWrapper
android:id="@+id/ofwrap_xAxis"
android:layout_
android:layout_
android:focusable="false"
android:measureAllChildren="true"
android:scrollbars="none" >
<LinearLayout
android:id="@+id/label_xAxis"
android:layout_
android:layout_
android:layout_gravity="right"
android:paddingRight="@dimen/chart_right_padding"
android:orientation="horizontal"
android:clipChildren="true"
android:gravity="right" >
</LinearLayout>
</com...HideHorizontalLeftOverflowWrapper>
【讨论】:
以上是关于调整 LinearLayout 的溢出的主要内容,如果未能解决你的问题,请参考以下文章
将 LinearLayout 调整为 ImageView 的宽度
在 LinearLayout 中将 TextView 调整为垂直居中(水平)
来自 url 的 LinearLayout setBackgroundDrawable 位图