sách gpt4 ăn đã đi

java - BottomSheet 在屏幕中的错误位置

In lại Tác giả: Walker 123 更新时间:2023-11-30 10:42:14 28 4
mua khóa gpt4 giày nike

FAB BottomSheet按下后出现在屏幕上,但是位置不对(见图1),我想做成图2的样子,怎么解决?

我的 Activity :

public class FirstscreenActivity extends AppCompatActivity implements RecyclerItemClickListener.OnItemClickListener,
ItemAdapter.ItemListener {

private BottomSheetDialog mBottomSheetDialog;
BottomSheetBehavior behavior;
private ItemAdapter mAdapterItem;
private FloatingActionButton floatButton;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.front);

floatButton = (FloatingActionButton) findViewById(R.id.float_button);
floatButton.setOnClickListener(new View.OnClickListener() {
@Ghi đè
public void onClick(View v) {
showBottomSheetDialog();
mBottomSheetDialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
mBottomSheetDialog.getWindow().setGravity(Gravity.BOTTOM);

}
});


View bottomSheet = findViewById(R.id.bottom_sheet);
behavior = BottomSheetBehavior.from(bottomSheet);

behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Ghi đè
public void onStateChanged(@NonNull View bottomSheet, int newState) {
// React to state change

}

@Ghi đè
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// React to dragging events
}
});
mAdapterItem = new ItemAdapter(createItems(), this);
}

@Ghi đè
protected void onResume() {
super.onResume();
RecyclerViewAdapter adapter = (RecyclerViewAdapter) mList.getAdapter();
adapter.notifyDataSetChanged();
}


@Ghi đè
public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.menu, menu);
return super.onPrepareOptionsMenu(menu);
}

private void showBottomSheetDialog() {

if (behavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}

mBottomSheetDialog = new BottomSheetDialog(this);

View view = getLayoutInflater().inflate(R.layout.sheet, null);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new ItemAdapter(createItems(), new ItemAdapter.ItemListener() {
@Ghi đè
public void onItemClick(Item item) {
if (mBottomSheetDialog != null) {
mBottomSheetDialog.dismiss();
}
}
}));

mBottomSheetDialog.setContentView(view);
mBottomSheetDialog.show();
mBottomSheetDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Ghi đè
public void onDismiss(DialogInterface dialog) {
mBottomSheetDialog = null;
}
});
}


@Ghi đè
protected void onDestroy() {
super.onDestroy();
mAdapterItem.setListener(null);
}

public List createItems() {
ArrayList items = new ArrayList<>();
items.add(new Item("Add new record"));
items.add(new Item(R.drawable.camera, "from new shoots"));
items.add(new Item(R.drawable.folder_multiple_image, "from ready images"));
return items;
}


@Ghi đè
public void onItemClick(Item item) {
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}

RecyclerView的适配器代码,在BottomSheet中:

public class ItemAdapter extends RecyclerView.Adapter {

private List mItems;
private ItemListener mListener;

public ItemAdapter(List items, ItemListener listener) {
mItems = items;
mListener = listener;
}

public void setListener(ItemListener listener) {
mListener = listener;
}

@Ghi đè
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

switch (viewType) {
case 0:
return new ViewHolderModified(LayoutInflater.from(parent.getContext())
.inflate(R.layout.bottom_title, parent, false));
default:
return new ViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.item, parent, false));
}

}

@Ghi đè
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (position == 0){
ViewHolderModified holderModified = (ViewHolderModified)holder;
holderModified.setData(mItems.get(position));
}
khác {
ViewHolder viewHolder = (ViewHolder)holder;
viewHolder.setData(mItems.get(position));
}
}

@Ghi đè
public int getItemCount() {
return mItems.size();
}

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

public ImageView imageView;
public TextView textView;
public Item item;

public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
imageView = (ImageView) itemView.findViewById(R.id.imageView);
textView = (TextView) itemView.findViewById(R.id.textView);
}

public void setData(Item item) {
this.item = item;
imageView.setImageResource(item.getDrawableResource());
textView.setText(item.getTitle());
}

@Ghi đè
public void onClick(View v) {
if (mListener != null) {
mListener.onItemClick(item);
}
}
}

public class ViewHolderModified extends RecyclerView.ViewHolder implements View.OnClickListener {

public TextView textView;
public Item item;

public ViewHolderModified(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
textView = (TextView) itemView.findViewById(R.id.titleView);
}

public void setData(Item item) {
this.item = item;
textView.setText(item.getTitle());
}

@Ghi đè
public void onClick(View v) {
if (mListener != null) {
mListener.onItemClick(item);
}
}
}


public interface ItemListener {
void onItemClick(Item item);
}

@Ghi đè
public int getItemViewType(int position) {
return position;
}
}

屏幕的xml:



xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<>
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#118b0a"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

<>
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/my_toolbar" />

<>
android:id="@+id/float_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_margin="16dp"
android:src="@drawable/add_white"
app:backgroundTint="@color/red"
/>


<>
android:layout_width="0dp"
android:layout_height="0dp">

<>
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff"
android:gravity="bottom"
android:orientation="vertical"
app:layout_behavior="@string/bottom_sheet_behavior">






RecyclerView 中的项目:



android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:gravity="center_vertical"
android:orientation="horizontal">
<>
android:id="@+id/imageView"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="16dp"
android:src="@mipmap/ic_launcher" />

<>
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginStart="16dp"
android:textColor="@color/black"
android:gravity="center_vertical"
android:textSize="22sp" />


BottomSheet 的 Xml:



android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:gravity="center_vertical"
android:orientation="horizontal">

<>
android:id="@+id/titleView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginStart="16dp"
android:gravity="center_vertical"
android:textColor="#787878"
android:textSize="20sp" />

图一:

nhập mô tả hình ảnh ở đây

图2:

nhập mô tả hình ảnh ở đây

câu trả lời hay nhất

我通过设置 BottomSheet 的固定高度解决了这个问题,我更改了这行代码:

mBottomSheetDialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

到:mBottomSheetDialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, 700);

关于java - BottomSheet 在屏幕中的错误位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38197876/

28 4 0
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress