【发布时间】:2014-08-01 18:14:38
【问题描述】:
我在自定义尺寸视图问题中迷失了几天。经过长时间的研究,我终于决定请求你的帮助......拜托! T_T
在我的应用程序中,我使用 XML calendrieradmin_day.xml 创建了一个自定义视图:
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/CalendrierAdmin_Day_Event_TableRow"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<!-- <TextView
android:id="@+id/CalendrierAdmin_Day_Event_TextView_Name"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:gravity="center" />-->
</TableRow>
目前,它是一个简单的 TableRow,但我以后需要添加一些其他内容。 (例如,注释的 TextView)。
我为使用它创建了三个类:Row、EventRow 和 EmptyRow。 Row 是抽象的,EventRow 和 EmptyRow 继承于 Row。此外,Row 继承了 TableRow。
我想在 TableLayout 中添加几个 EventRow 和 EmptyRow,我需要动态调整它们的大小。
在 EmptyRow 和 EventRow 的构造方法中,我调用了一个 init() 方法。这是 EventRow 之一:
private void init(Context c, TableLayout root) {
root = (TableLayout)LayoutInflater.from(c).inflate(R.layout.calendrieradmin_day_event, root, true);
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) root.getLayoutParams();
lp.height = getHeightOfMinute() * getDuree();
lp.width = getTheWidth();
/*
Some other stuff
...
...
*/
this.setLayoutParams(lp);
root.addView(this);
setOnClickListener(this);
setOnLongClickListener(this);
}
当然,它不能作为例外工作。 EventRow 未显示。
root 是我的 TableLayout 我传入构造函数。 getHeightOfMinute() 和 getDuree() 工作正常并给我正确的尺寸。我曾经使用像 inflate(R.layout.calendrieradmin_day_event, null, false) 这样的 inflate() 方法,它工作得很好,但是 Eclipse 给了我一个警告,告诉我我不应该将 null 作为 RootView 参数传递。尽管一切正常,但我开始寻找另一种解决方案,这就是我目前为止的目标......
我使用 setMinimumHeight() 和 setMinimumWidth() 方法来调整我的 EventRow 和 EmptyRow。它有效,但我认为有更好的方法来做到这一点。我尝试了很多解决方案,但我搞砸了!我认为关于 inflate() 和/或 LayoutParams 的功能我还没有理解。
你能帮我吗?提前致谢 !
如果您需要更多源代码,请告诉我。
PS:抱歉英语不好,我是法国人。
【问题讨论】:
-
Viliktùr 你有没有得到这个?我面临着类似的问题
-
是的,但我改变了很多东西...... :-)
-
好的,我昨天设法让它自己工作,不得不同时覆盖 onLayout 和 onMeasure。
-
我设法通过使用一些 LinearLayout 和 weight 属性使其工作。你想让我说得更直白吗?如果你能解释一下你自己的方法,我会很高兴,我相信它总有一天会有用。
标签: android xml custom-view android-inflate layoutparams