【问题标题】:How can i set inflated view width, half of it's parent?我怎样才能设置膨胀的视图宽度,它的父母的一半?
【发布时间】:2015-12-23 14:42:04
【问题描述】:

我用这个方法给视图充气:

public TabViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.tabs_layout, parent, false);
    return new TabViewHolder(view);
}

由于“False”,我的 LinearLayout 没有附加到它的父级,因此没有父级,我不能使用 Layer_Weight(我用 view.getParent() 进行了测试。它返回 null)。因为当我将 Layer_Weight 与“Layer_Width = 0dip”结合使用时,LinearLayout 消失了。

如果我使用“True”作为第三个参数(view.getParent() 返回父级),我会收到此错误:

"指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()。".

这是父母:

<android.support.v7.widget.RecyclerView android:id="@+id/tabBar" style="@style/tabBar"/>

这是父样式:

<style name="tabBar">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">0dip</item>
     <item name="android:layout_weight">0.1</item>
     <item name="android:weightSum">1</item>
     <item name="android:background">@color/headerBg</item>
</style>

这是LinearLayout,子样式:

<style name="tabLayout">
     <item name="android:layout_width">0dip</item>
     <item name="android:layout_height">match_parent</item>
     <item name="android:layout_weight">0.5</item>
     <item name="android:orientation">horizontal</item>
     <item name="android:gravity">center_vertical</item>
 </style>

这是孙子,TextView:

<style name="tabItem">
     <item name="android:layout_width">wrap_content</item>
     <item name="android:layout_height">wrap_content</item>
</style>

我如何设置 LinearLayout 的宽度,它是父级的一半?

提前欣赏。

【问题讨论】:

  • 问题是您的视图不会显示为RecyclerView 的子视图 - 它们显示为您的布局管理器创建的视图的子视图。您必须为它们设置重量总和,但您不能。你想要达到什么目的?对我来说,如果您将整个 RecyclerView 的宽度设置为其父级的一半宽度,您的问题似乎会得到解决
  • 谢谢你。我有一个片段容器和一些要加载的片段。其中一些片段会随着选项卡之类的东西而改变,但其他片段会随着菜单而改变,并且这些片段内部没有选项卡。我将 recyclerView 用作选项卡容器,并且在一个屏幕中应该只有两个宽度相等的选项卡,并且 recyclerView 应该是水平的。我已经在 recyclerView 中使用了 layer_weight 和 layer_height。如何将它与 layer_width 一起使用?

标签: android android-linearlayout android-recyclerview android-inflate


【解决方案1】:

我用这种方式来达到目的。

我将recyclerView(父级)作为参数发送给tabBarAdapter,它膨胀了linearLayout(子级),并在此适配器中,在onCreateViewHolder方法中将linearLayout的宽度设置为recyclerView的一半宽度。

view.getLayoutParams().width = tabBar.getWidth()/2;

我认为,这是反对“松散耦合”(我想将样式与代码完全分开)。

【讨论】:

  • 谢谢你,迪奥戈·加西亚。但我没有更改我的代码,我的应用程序仍然正常工作,我的 android 版本是 6.0.1。或更新版本的 recyclerview 是新语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多