Android (Java) — Макет обрезается по краям

#java #android #mobile #layout #crop

#java #Android #Мобильный #макет #обрезка

Вопрос:

Я довольно новичок в Android Studio, так что это может быть простым решением (я надеюсь).

Я получил этот подробный вид элемента, но даже при том, что ширина и высота макета установлены в «match_parent», он не подходит для экрана моего телефона. Не имеет значения, какой макет или .xml я использую, он все равно обрезан (линейный, относительный, ограниченный), поэтому я предполагаю, что это что-то в коде.

изображение обрезанного макета

И вот код, в котором, я думаю, проблема:

     public class RecyclerViewAdapterBiography extends RecyclerView.Adapter < RecyclerViewAdapterBiography.MyViewHolder > {

    private Context myContext;
    private List < TimeStamp > myData;
    private Dialog myDialog;

    public RecyclerViewAdapterBiography(Context myContext, List < TimeStamp > myData) {
        this.myContext = myContext;
        this.myData = myData;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View v;
        v = LayoutInflater.from(myContext).inflate(R.layout.biography_item, parent, false);
        final MyViewHolder viewHolder = new MyViewHolder(v);

        // Detail View of the Biography TimeStamps


        // makes the background of the dialog box transparent
        // myDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

        // OnClickListener for the different Items in the View (to see the detail view)
        viewHolder.biography_item_id.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                myDialog = new Dialog(myContext);
                myDialog.setContentView(R.layout.biography_detail);

                TextView tv_dialog_title = (TextView) myDialog.findViewById(R.id.bio_details_title);
                TextView tv_dialog_text = (TextView) myDialog.findViewById(R.id.bio_details_desc);

                tv_dialog_title.setText(myData.get(viewHolder.getAdapterPosition()).getTitle());
                tv_dialog_text.setText(myData.get(viewHolder.getAdapterPosition()).getDialog());

                /*
                Toast.makeText(myContext,"Test Click"   String.valueOf
                        (viewHolder.getAdapterPosition()), Toast.LENGTH_SHORT).show();
                 */

                myDialog.show();

            }
        });

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {

        holder.tv_year.setText(myData.get(position).getYear());
        holder.tv_title.setText(myData.get(position).getTitle());
    }

    @Override
    public int getItemCount() {
        return myData.size();
    }


    public static class MyViewHolder extends RecyclerView.ViewHolder {

        private LinearLayout biography_item_id;
        private TextView tv_year;
        private TextView tv_title;

        public MyViewHolder(View itemView) {
            super(itemView);

            biography_item_id = (LinearLayout) itemView.findViewById(R.id.biography_item_id);
            tv_year = (TextView) itemView.findViewById(R.id.biography_year);
            tv_title = (TextView) itemView.findViewById(R.id.biography_title);

        }
    }
}

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fcfcfc">

<androidx.core.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="10dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical">

        <ImageView
            android:layout_width="125dp"
            android:layout_height="175dp"
            android:background="#2d2d2d"
            android:id="@ id/item_biography_img"
            android:scaleType="centerCrop"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Title"
            android:id="@ id/bio_details_title"
            android:textStyle="bold"
            android:textSize="24sp"
            android:layout_marginTop="10dp"/>

        <TextView
            android:id="@ id/bio_details_desc"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:layout_marginTop="10dp"
            android:text="Description" />


    </LinearLayout>

</androidx.core.widget.NestedScrollView>
  

Я в принципе перепробовал все, и rn я просто a / b с материалом, который я нашел в Интернете, чтобы решить эту проблему, но я не могу найти никакого решения

Ответ №1:

Dialog s предназначены для того, чтобы быть такими — они появляются поверх содержимого вашего приложения, занимают только часть экрана, и вы не можете взаимодействовать с остальной частью приложения, когда они отображаются.

Лучше всего взглянуть на документы — как будто там сказано, что на самом деле вы не собираетесь использовать Dialog класс напрямую, обычным способом является использование AlertDialog.Builder и вызов методов настройки для определения заголовка, кнопок и т.д. Одним из методов является setView(), с помощью которого вы можете поместить туда пользовательский макет, который вы можете получить, предварительно увеличив макет:

 view = activity.layoutInflater.inflate(R.layout.biography_detail, null)
  

Диалоги имеют свой собственный макет со всеми закругленными углами, затенением и тому подобным, поэтому, когда вы просто делаете setContentView , вы заменяете весь этот стиль, а вы обычно этого не хотите!


Если вам не нужен этот стиль или вы хотите больше контроля (например, сделать его полноэкранным), тогда вам следует создать DialogFragment здесь есть хорошее руководство (лично я думаю, что этот сайт действительно полезен для обзоров тем)

В полноэкранных диалоговых окнах ближе к концу есть кое-что — в основном a DialogFragment работает как a Fragment , за исключением того, что вы реализуете onCreateDialog метод вместо onCreate , и именно там вы настраиваете Dialog созданный для вас системой. Когда вы хотите его отобразить, вы создаете экземпляр и используете FragmentManager для его отображения. Первый пример в ссылке объясняет это, поэтому я не буду вставлять его сюда!