动态更改视图存根 layout_height 属性?
Posted
技术标签:
【中文标题】动态更改视图存根 layout_height 属性?【英文标题】:Dynamically change View Stub layout_height attribute? 【发布时间】:2014-02-24 09:51:47 【问题描述】:我在我的应用程序中使用 view stub。我正在将 view stub 膨胀到布局中,它工作正常。现在,如果您看到 dummy_layout.xml,我已经给出了 android:layout_height=20dp。我需要做的是在单击按钮时将该视图存根高度从 20 dp 更改为 Wrap_Content。我怎样才能做到这一点?
我的最终目标是这个。我有一个按钮。当我第一次单击它时,我需要显示存根的完整布局。当我第二次单击它时,我需要为存根设置动画以向下滑动并仅显示它的一部分。
dummy_layout.xml
<RelativeLayout
android:id="@+id/topLayout"
android:layout_
android:layout_ >
<ImageView
android:id="@+id/imageView1"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_watch_pic" />
<Button
android:id="@+id/button1"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:background="@color/dark_grey"
android:text="Button" />
<Button
android:id="@+id/button2"
android:layout_
android:layout_
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="Button" />
</RelativeLayout>
<ViewStub
android:id="@+id/viewStub1"
android:layout="@layout/stub_layout"
android:layout_
**android:layout_**
android:layout_alignParentBottom="true"/>
</RelativeLayout>
这是我的课:
public class DummyFragment extends Fragment
private View mRootView;
private Context mContext;
private Button mButton;
private boolean isVisible = true;
private RelativeLayout mParentLayout;
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
mRootView = inflater.inflate(R.layout.dummy_layout,
container, false);
mContext = getActivity();
mButton = (Button) mTopLayout.findViewById(R.id.button1);
final ViewStub stub = (ViewStub) mRootView.findViewById(R.id.viewStub1);
**final View inflated = stub.inflate();**
inflated.setVisibility(View.VISIBLE);
final View viewstublayout = mRootView.findViewById(R.id.viewStub1);
mButton.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
if(isVisible)
isVisible=false;
inflated.setVisibility(View.VISIBLE);
else
isVisible=true;
inflated.setVisibility(View.INVISIBLE);
);
return mRootView;
【问题讨论】:
IMO,ViewStub 存在缺陷,因为它应该从字面上“成为”其中新膨胀的视图。包括任何参数,宽度,高度,重力等...... 【参考方案1】:您可以通过编辑视图的LayoutParams 来更改视图的宽度/高度。示例:
View stub = findViewById(R.id.viewStub1);
ViewGroup.LayoutParams lp = stub.getLayoutParams();
lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
stub.setLayoutParams(lp);
更好的问题是您为什么要这样做?也许有更好的方法来实现您的目标。
【讨论】:
我有一个按钮。当我第一次单击它时,我需要显示存根的完整布局。当我第二次单击它时,我需要为存根设置动画以向下滑动并仅显示它的一部分。 这应该可以工作。在我的头顶上不知道更好/更清洁的方式,但是我之前没有使用过可扩展视图。如果您遇到困难,请告诉我:)。【参考方案2】:试试这个
final ViewStub stub = (ViewStub) mRootView.findViewById(R.id.viewStub1);
View view = stub .inflate();
内部按钮点击
LayoutParams params = (LayoutParams) view.getLayoutParams();
params.width = LayoutParams.WRAP_CONTENT;
view.setLayoutParams(params);
【讨论】:
【参考方案3】:试试这个,如果效果好告诉我。
LayoutParams lp = (LayoutParams) (YourView).getLayoutParams();
lp.height = newheight;
YourView.setLayoutParams(lp);
【讨论】:
以上是关于动态更改视图存根 layout_height 属性?的主要内容,如果未能解决你的问题,请参考以下文章
元素形状没有必需的属性 android:layout_height