gpt4 book ai didi

java - 在 Android 中将参数设置为布局时崩溃

转载 作者:搜寻专家 更新时间:2023-11-01 08:58:05 24 4
gpt4 key购买 nike

预期结果

单击切换按钮将显示菜单并向右滑出内容 View 。动画结束后,内容 View 的布局参数更新到最终位置。

问题

更新内容 View 的最终位置时,语句 mViewContent.setLayoutParams(params); 导致崩溃。错误信息是java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams

源代码

Main.java > public class MainActivity extends Activity {}

public void onToggleButtonMenuClicked(View view) {
// Is the toggle on?
boolean toggleTurnedOn = ((ToggleButton) view).isChecked();

if (toggleTurnedOn) { // If the toggle is turned on
// Show menu
LinearLayout mViewMenu = (LinearLayout) findViewById(R.id.linear_layout_menu);
Animation animMenuOn = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_menu_on);
mViewMenu.startAnimation(animMenuOn);

LinearLayout mViewContent = (LinearLayout) findViewById(R.id.linear_layout_content);
Animation animContentOff = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_content_off);
mViewContent.startAnimation(animContentOff);

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(480, 800);
params.leftMargin = 384; // Shift 384 pixels from left screen border
params.rightMargin = -96; // Exceed 96 pixels from right screen border
mViewContent.setLayoutParams(params); // This statement causes crash!
} else {
// Hide menu...
} // End of toggle events handling

} // End of onToggleButtonMenuClicked()

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="329dp"
android:layout_height="wrap_content" >

<!-- The Menu View -->
<LinearLayout
android:id="@+id/linear_layout_menu"
android:layout_width="263dp"
android:layout_height="wrap_content"
android:orientation="vertical" >

<LinearLayout
android:id="@+id/table_row_1_search_bar"
android:layout_width="match_parent"
android:layout_height="40dp"
android:weightSum="10"
android:orientation="horizontal" >

<EditText
android:id="@+id/edit_text_search_id"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="7"
android:hint="@string/edit_text_search_id"
android:textSize="14sp" />

<Button
android:id="@+id/button_search_id"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="3"
android:text="@string/button_search_id" />

</LinearLayout>

<!-- Other rows in the menu are omitted -->

</LinearLayout> <!-- End of Menu -->

<!-- The Content View -->
<LinearLayout
android:id="@+id/linear_layout_content"
android:layout_width="329dp"
android:layout_height="match_parent"
android:orientation="vertical" >

<ToggleButton
android:id="@+id/toggle_button_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onToggleButtonMenuClicked" />

<TextView
android:id="@+id/text_content"
android:layout_width="480dp"
android:layout_height="wrap_content"
android:text="@string/text_content" />

</LinearLayout> <!-- End of Content -->

</FrameLayout> <!-- End of the root linear layout -->

最佳答案

mViewContent 参数应添加到您的父 View ,假设您的父 View 为 LinearLayout 那么,LinearLayout.LayoutParams 必须是用过。

解释(改编自 here ):-

比如LinearLayout.LayoutParamsRelativeLayout.LayoutParams,它们是不同的独立类。他们存储有关 subview 的不同附加信息......比如..

  • LinearLayout.LayoutParams 可以为每一个关联权重值 View ,而 RelativeLayout.LayoutParams 不能。
  • RelativeLayout.LayoutParams 可以有像 alightWithParentabovebelow 这样的值与每个 View 同时 LinearLayout.LayoutParams 不能。

虽然代码不会给出编译时错误,因为所有 LayoutParams 都有相同的父类,即 ViewGroup.LayoutParams。因此,根据父布局分配 Layout 参数始终是必不可少的。

关于java - 在 Android 中将参数设置为布局时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17423707/

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