gpt4 book ai didi

android - 为图库中的元素设置布局参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:37 25 4
gpt4 key购买 nike

我正在使用 Gallery 来显示事件的水平时间轴。一些事件获得 Gravity.TOP 和一些 Gravity.BOTTOM 以将它们对齐在显示年份的漂亮线条上方或下方。到目前为止,还不错。

我想更改顶部元素的左边距属性,因此没有巨大的间隙并且元素看起来交错。例如:为每个顶部对齐的元素设置一个负的左边距。

Gallery 的每个元素都由一个 LinearLayout 组成,可以设置一个 MarginLayoutParams 实例以编程方式更改边距。但是,在适配器内部使用 MarginLayoutParams 时,我得到了一个 ClassCastException,因为 Gallery 代码是这样做的:

    // Respect layout params that are already in the view. Otherwise
// make some up...
Gallery.LayoutParams lp = (Gallery.LayoutParams) child.getLayoutParams();

关于如何克服这个问题有什么想法或提示吗?

最佳答案

Each element of the Gallery consists on a LinearLayout

只需使用另一个 LinearLayout 包裹它,并在 LinerLayout.LayoutParams 中为内部 LinearLayout 设置边距。我已经检查过了,它似乎可以满足您的要求。

因此,您为 Gallery 项目扩充的布局应如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layOuter"
android:layout_width="wrap_content" android:layout_height="wrap_content">

<LinearLayout
android:id="@+id/layInner"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical">

<ImageView android:id="@+id/imageView1" android:src="@drawable/icon"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:scaleType="fitXY" />

<TextView android:text="TextView" android:id="@+id/textView"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:visibility="visible" />
</LinearLayout>
</LinearLayout>

然后您可以在适配器 getView 方法中访问内部 LinearLayout 并根据您的条件在那里设置边距(没有 convertView 重用优化的示例代码):

public View getView(int position, View convertView, ViewGroup parent) {
Context context = getContext();
final float density = context.getResources().getDisplayMetrics().density;

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layOuter = inflater.inflate(R.layout.row_layout, null);
View layInner = layOuter.findViewById(R.id.layInner);
if (...) { // your condition
LinearLayout.LayoutParams innerLP = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
innerLP.leftMargin = (int) (50 * density);
layInner.setLayoutParams(innerLP);
}
return layOuter;
}

请注意,您必须使用 LinearLayout.LayoutParams(它扩展了 MarginLayoutParams)作为内部布局,否则它将无法工作。

关于android - 为图库中的元素设置布局参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5858289/

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