gpt4 book ai didi

java - 使用 XML 扩展 Android View?

转载 作者:行者123 更新时间:2023-12-01 13:40:26 25 4
gpt4 key购买 nike

我想使用 Android 的典型 XML 来定义我的布局,但我需要重写 ScrollView 中的 onScrollChanged()。这是我当前的尝试,它生成一个类转换异常:

class MyHorizontalScrollView extends HorizontalScrollView {

private final AbstractChartActivity abstractChartActivity;

public MyHorizontalScrollView(AbstractChartActivity abstractChartActivity,
Context context) {
super(context);
this.abstractChartActivity = abstractChartActivity;
}

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
String tag = (String) this.getTag();

// if the instance is listening to the column header scroll, then
// move the body
if (tag.equalsIgnoreCase(AbstractChartActivity.COL_HEADER_SCROLL)) {
abstractChartActivity.goodiBodyHorizontalScrollView.scrollTo(l, 0);
} else {
// if the instance is listening to the body scroll, then move
// the header
abstractChartActivity.columnHeaderHorizontalScrollView.scrollTo(l, 0);
}
}

}

以及布局...

<TableLayout
android:id="@+id/blank_cell_above_labels_table"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</TableLayout>

<HorizontalScrollView
android:id="@+id/column_header_horizontal_scroll"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/blank_cell_above_labels_table" >

<TableLayout
android:id="@+id/column_header_table"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TableLayout>
</HorizontalScrollView>

此行会引发类转换异常,因为 MyHorizo​​ntalScrollView 扩展了 Horizo​​ntalScrollView 但类型不完全相同。

columnHeaderHorizontalScrollView = (HorizontalScrollView) findViewById(R.id.column_header_horizontal_scroll);

我通过以编程方式实现布局来完成这一切。但我担心这将是维护的噩梦,因此我想尽可能将功能转移到 XML。

如何扩展 Android 类并在 XML 中使用它?

谢谢

最佳答案

使用

<com.example.app.MyHorizontalScrollView 
android:id="@+id/column_header_horizontal_scroll"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/blank_cell_above_labels_table" >

其中 com.example.app 是包名称,MyHorizo​​ntalScrollView 是。

然后

columnHeaderHorizontalScrollView = (MyHorizontalScrollView) findViewById(R.id.column_header_horizontal_scroll);

另外添加 2 个构造函数

public MyHorizontalScrollView(Context context) {
super(context);
}
public MyHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);

}

您可能想阅读我的《Retro Meir Professional Android Application Development》一书。第4章

关于java - 使用 XML 扩展 Android View?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20845328/

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