我的问题是我有一个主屏幕,我想通过单击按钮动态生成其下的视图,然后将主视图从屏幕上滑动,显示其下方的视图。我已经完成了这个,但我觉得必须有一个更好的方法。我完成它的方式是非常有限的,因为你不能只在主体下反复生成视图。
我的主要XML文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<RelativeLayout
android:id="@+id/subpage"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
</RelativeLayout>
<RelativeLayout
android:id="@+id/homescreen"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/homebg"
>
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
我删除了一些不必要的东西。这是重要的。请注意,主布局的第一个子节点是id为“subpage”的相对布局。因为它是当我点击一个按钮时使用java将另一个布局膨胀到子页面布局然后我在屏幕上设置“主屏幕”布局的动画。看来我不应该事先声明子页面。我想我的问题是,有没有办法在现有布局下动态声明一个新的子布局?
=============================================== ========================
编辑:问题的第2部分
我正在尝试使用addView和应用程序崩溃。这是我用来尝试添加视图并将xml扩展到其中的代码。在下面的代码中,子视图是一个ViewGroup,因为根据我的理解,你只能扩展到ViewGroups,而不是常规视图。此外,“活动”在类的顶部定义为“私有活动活动=此”。什么可能导致崩溃的想法?
btnHelp.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
subView = (ViewGroup)new View(getApplicationContext());
mainScreen.addView(subView,1);
LayoutInflater inflater = activity.getLayoutInflater();
inflater.inflate(R.layout.help, subView);
}
});
=============================================== ========================
编辑:问题的第3部分
还有一个问题。只要充气和滑落,一切都很好。但是,膨胀的视图中有一个按钮。我正在尝试为该按钮分配一个监听器,但它似乎不起作用。我正在通过在我一直在研究的btnHelp中调用布局inflater之后将监听器添加到按钮来实现它。这是代码:
btnHelp.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
LayoutInflater inflater = activity.getLayoutInflater();
mainScreen.addView(inflater.inflate(R.layout.help, null),0);
homeScrn.startAnimation(slideLeftOut);
btnBackHome = (ImageView)findViewById(R.id.backMenuBtn);
btnBackHome.setOnClickListener(goHome);
}
});
goHome是我在下面定义的处理程序:
private OnClickListener goHome = new OnClickListener(){
public void onClick(View v) {
Log.d("ClickEvent: ","btnBackHome Clicked");
homeScrn.startAnimation(slideRightIn);
}
};
当我点击btnBackHome引用的按钮时,它什么也没做。我只是不确定是不是因为听众实际上没有被分配,有些东西是让按钮实际被点击,或其他东西。
答案 0 :(得分:2)
在addView()
上调用RelativeLayout
以向其添加子项,其中子项要么被夸大(getLayoutInflater().inflate()
),要么直接用Java构建。
另外,你可以考虑使用ViewFlipper
,考虑到你正在寻找的东西(从孩子到孩子的动画过渡,在稳定状态下一次只能看到一个孩子),也许少用代码。
答案 1 :(得分:0)
启动新活动时的默认动画是滑动动画..为什么不将“主屏幕”和“子页面”分成2个不同的XML文件和2个活动?