我设计了一个带有地图片段和回收器视图的布局。每个回收器视图项都是cardview(我已经指定了xml布局)。
问题是RecyclerView项无法填满屏幕宽度。
我尝试将layout_width更改为fill_parent
,match_parent
…但这没有帮助
下面是每个项目的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:id="@+id/cardView">
<LinearLayout
android:id="@+id/locationItemView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="120px"
android:layout_height="120px"
android:id="@+id/imgIcon"
android:background="@drawable/image_bg"
android:layout_margin="5dp"
android:scaleType="fitCenter"
android:adjustViewBounds="true" />
<LinearLayout
android:id="@+id/layoutInfo"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/txtName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Location Name"
android:textColor="#d5c645"
android:textStyle="bold"
android:textSize="20dp"
android:padding="3dp" />
<TextView
android:id="@+id/txtAddress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Location Address"
android:textSize="16dp"
android:padding="3dp" />
<TextView
android:id="@+id/txtDistance"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:text="Location Distance"
android:textSize="14dp"
android:textStyle="italic"
android:padding="2dp"
android:textAlignment="viewEnd" />
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
和main_layout
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:map="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
android:layout_height="0px" android:id="@+id/map" tools:context=".Main"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_weight=".6"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/locationList"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight=".4"
android:divider="#FEFFCC"
android:dividerHeight="1dp" />
</LinearLayout>
<ListView
android:id="@+id/navdrawer"
android:layout_width="250px"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="?attr/colorPrimaryDark"
android:choiceMode="singleChoice"
android:divider="@android:color/white"
android:dividerHeight="1dp"
android:drawSelectorOnTop="false"/>
</android.support.v4.widget.DrawerLayout>
希望任何人都能帮助我。我被困了三天。非常感谢。
====~=======:===>====1====2===]====3====0.=2015年11月19日编辑我不认为问题出在我的itemView布局上,因为当我将其更改为GridLayout时,它仍然无法填充宽度。这是我的用于RecyclerView的CustomAdapter
public class LocationDetailsAdapter extends RecyclerView.Adapter<LocationDetailsViewHolder> {
Context _context;
ArrayList<LocationDetails> _data;
public LocationDetailsAdapter(Context _context, ArrayList<LocationDetails> _object) {
this._context = _context;
_data = _object;
}
@Override
public LocationDetailsViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View _v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_location,null );
LocationDetailsViewHolder _viewHolder = new LocationDetailsViewHolder(_v);
return _viewHolder;
}
@Override
public void onBindViewHolder(LocationDetailsViewHolder locationDetailsViewHolder, int i) {
LocationDetails _location = _data.get(i);
locationDetailsViewHolder._imgType.setImageResource(R.drawable.repair_img);
locationDetailsViewHolder._locationName.setText(_location.get_locationName());
locationDetailsViewHolder._locationAddress.setText(_location.get_locationAddress() + ", " + _location.get_district() + ", " + _location.get_province());
locationDetailsViewHolder._distance.setText(String.valueOf(_location.get_distance()) + " km");
locationDetailsViewHolder._locationName.setOnClickListener(clickListener);
locationDetailsViewHolder._imgType.setOnClickListener(clickListener);
locationDetailsViewHolder._locationAddress.setOnClickListener(clickListener);
locationDetailsViewHolder._locationName.setTag(locationDetailsViewHolder);
locationDetailsViewHolder._imgType.setTag(locationDetailsViewHolder);
locationDetailsViewHolder._locationAddress.setTag(locationDetailsViewHolder);
}
@Override
public int getItemCount() {
return (null != _data ? _data.size() : 0);
}
View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
LocationDetailsViewHolder _holder = (LocationDetailsViewHolder)v.getTag();
int _pos = _holder.getPosition();
int _id = _data.get(_pos).get_id();
Intent _intent = new Intent(CommonFields._context, ItemView.class);
_intent.putExtra("LocationID",_id);
_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
CommonFields._context.startActivity(_intent);
}
};
}
这是我在main上看到的循环视图
_locationView = (RecyclerView)findViewById(R.id.locationList);
_locationView.setLayoutManager(new LinearLayoutManager(this));
_adapter = new LocationDetailsAdapter(Main.this, CommonFields._locationData);
_locationView.setAdapter(_adapter);
也许我的答案有不同的方法,但它可以占据屏幕的整个宽度,并且在通过回收视图时不会破坏元素。
Adapter adapterBalanceInquiry = new Adapter(getActivity(), list);
recyclerView.setHasFixedSize(true);
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setAdapter(adapterBalanceInquiry);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), RecyclerView.HORIZONTAL, false));
recyclerView.post(new Runnable() {
@Override
public void run() {
try {
int dx = (recyclerView.getWidth() - recyclerView.getChildAt(0).getWidth());
recyclerView.scrollBy(-dx, 0);
LinearSnapHelper snapHelper = new LinearSnapHelper();
recyclerView.setOnFlingListener(null);
snapHelper.attachToRecyclerView(recyclerView);
}catch (Exception e){
e.printStackTrace();
}
}
});
你应该像这样创建View
@Override
public CardViewDataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
// create a new view
View itemLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(
R.layout.card_view, viewGroup, false);
// create ViewHolder
ViewHolder viewHolder = new ViewHolder(itemLayoutView);
return viewHolder;
}
从布局浏览器中
扩充视图
时,需要传递父参数才能使用layout_*
属性。这是因为这些属性需要创建正确的布局参数
类。这意味着您不能使用膨胀(R.layout.*, null),
而必须为第二个参数传递一个视图组
。在大多数情况下,您还希望使用该方法的三参数版本,并将 false
作为第三个参数传递。如果省略或满足此参数,
则会立即将视图添加到父级
,这会导致 onCreateViewHolder()
等位置出现问题,因为框架旨在稍后执行此操作。有关更多详细信息,请参阅此答案。
在你的情况下,你有线
View _v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_location,null );
你应该把它改成
View _v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_location, viewGroup, false );
我有一个带有listview的片段,它的适配器包含两种类型的单元格(取决于位置)。 列表中的第一个单元格应该是自定义视图(按钮,ViewPager,CirclePageSignator),第一个单元格宽度match_parent 第二个单元格也是自定义视图,其中包含按钮和图像视图。 我的问题是,当我放置ViewPager时,在第一个单元格中看不到ViewPager。宽度以包装内容或填充父对象或匹配
我有一个用SceneBuilder生成的TableView,所有列都是从其他视图导入的FXML,直到没有问题为止,但列没有填充宽度。 我试图用scene builder和FXML来解决这个问题,但没有运气,所有的大小都是计算出来的。 我尝试用一个change listener对其进行编码,它在每次窗口改变大小以适应列的大小时都会进行检查。 这样可以工作,并且列的大小调整到适当的宽度(基本上我得到了
问题内容: 我有这个标题栏。 我需要searchBar来填补div中剩余的空白。我该怎么做? 这是我的CSS 问题答案: 您可以使用CSS表格单元格实现此布局。 稍微修改您的HTML,如下所示: 只需删除两个元素周围的wrapper 元素即可。 应用以下CSS: 适用于并给它100%的宽度。 对于,,,适用。 对于,将宽度设置为90%,这将迫使所有其他元素计算出缩小以适合的宽度,搜索栏将展开以填充
问题内容: 如何使div填充剩余宽度? 我如何才能填满其余部分? 问题答案: 试试这样的事情: div自然会占用其容器的100%宽度,因此无需显式设置此宽度。通过添加与两侧div相同的左/右页边距,它自己的内容被强制置于它们之间。 请注意,“中间格”云 后 的HTML“正确的div”
问题内容: 我希望网格垂直填充: 而不是水平填充: 在我的网格中,我想指定列数,而不是行数。 这是我的div看起来: 问题答案: 最初,网格在水平方向上布置项目。这是因为网格容器的初始设置为 。 那就是您在布局中得到的: 如果切换到,则网格项目将垂直放置。 但是对于垂直轴上的行行为,您需要定义行。 从规格: 7.7。 自动放置:属性 此属性控制自动放置算法的工作方式,准确指定自动放置的项目如何流入
所以我试图去有一个交错的布局,但列表中的第一项需要跨越两列。前两排也是固定高度。除了跨越两列的第一个项目,其他都正常工作。 我将RecyclerView.Adapter与StaggeredGridLayoutManager一起使用。它似乎不是开箱即用的功能。我假设我可以制作一个自定义布局管理器,但我不知道从哪里开始。我尝试过搜索,但我找不到任何关于如何让项目跨越多列的信息。 下图是我在列表中寻找的