首页 > 解决方案 > 为什么设备上的对话框设计不一致?

问题描述

我设计了对话框,并为它分配了一个名为 XML 布局的文件,其中包含一组元素,然后创建了一个函数来从片段中显示它。它很好地出现在模拟器屏幕上,但在设备上却不一样。

设备井上显示的适当调整是什么?

在此处输入图像描述

// layout xml 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="260dp"
    android:layout_height="260dp"
    android:orientation="vertical"
    android:background="#f71717">

    <LinearLayout
        android:id="@+id/l_layout"
        android:paddingTop="10dp"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        tools:ignore="ObsoleteLayoutParam">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            tools:ignore="ExtraText">
            <RadioGroup
                android:id="@+id/radioSex"
                android:orientation="horizontal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                tools:ignore="UselessParent">

                <RadioButton
                    android:id="@+id/second2"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:button="@null"
                    android:layoutDirection="rtl"
                    android:textAlignment="textStart"
                    android:layout_gravity="start"
                    android:textDirection="rtl"
                    android:drawablePadding="10dp"
                    android:drawableRight="@android:drawable/btn_radio"
                    android:text="رفض"

                    android:textColor="#ffffff"
                    android:textSize="20dp"
                    tools:ignore="HardcodedText,RtlHardcoded,SpUsage" />
                <RadioButton
                    android:id="@+id/second"
                    android:checked="true"
                    android:layoutDirection="rtl"
                    android:textDirection="rtl"
                    android:textAlignment="textStart"
                    android:layout_gravity="start"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:button="@null"
                    android:drawablePadding="10dp"
                    android:drawableRight="@android:drawable/btn_radio"
                    android:text="قبول"
                    android:textColor="#ffffff"
                    android:textSize="20dp"
                    tools:ignore="HardcodedText,RtlHardcoded,SpUsage" />
            </RadioGroup>
            />
        </LinearLayout>

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:textColor="#ffffff"
            android:text="وقت التسليم"
            android:textSize="20dp"
            tools:ignore="HardcodedText,SpUsage" />

        <Spinner
            android:id="@+id/tex"
            android:layout_width="172dp"
            android:paddingRight="40dp"
            android:layout_height="wrap_content"
            android:layout_below="@+id/tv_title"
            android:drawSelectorOnTop="true"
            android:popupBackground="#fff78c"
            style="@style/spinner_style"
            tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry,SpUsage"
            android:entries="@array/day_"/>
    </LinearLayout>


    <RelativeLayout
        android:id="@+id/rl"
        android:layout_width="250dp"
        android:layout_height="129dp"
        android:layout_below="@+id/l_layout"
        android:background="#f71717"
        android:layout_marginTop="0dp"
        tools:ignore="ObsoleteLayoutParam">


        <TextView
            android:id="@+id/tv_h"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_toStartOf="@+id/spinner_minutes2"
            android:paddingLeft="10dp"
            android:text="ساعة"
            android:textColor="#ffffff"
            tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" />

        <TextView
            android:id="@+id/tv_m"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/spinner_minutes2"
            android:layout_alignBottom="@+id/spinner_minutes2"
            android:layout_alignStart="@+id/button_holder"
            android:paddingLeft="10dp"
            android:text="دق"
            android:textColor="#ffffff"
            tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" />

        <TextView
            android:id="@+id/tv_pam"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/spinner_minutes"
            android:layout_alignBottom="@+id/spinner_minutes"
            android:layout_alignEnd="@+id/spinner_minutes3"
            android:layout_marginEnd="12dp"
            android:paddingLeft="30dp"
            android:text="ص/م"
            android:textColor="#ffffff"
            tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" />


        <Spinner
            android:id="@+id/spinner_minutes"
            android:layout_width="85dip"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            style="@style/spinner_style"
            android:popupBackground="#fff78c"
            android:layout_alignStart="@+id/spinner_minutes2"
            android:entries="@array/hour_" />


        <Spinner
            android:id="@+id/spinner_minutes2"
            android:layout_width="85dip"
            android:layout_height="wrap_content"
            android:layout_below="@+id/spinner_minutes"
            android:layout_marginStart="16dp"
            android:popupBackground="#fff78c"
            style="@style/spinner_style"
            android:layout_toEndOf="@+id/tv_m"
            android:entries="@array/hour_" />


        <Spinner
            android:id="@+id/spinner_minutes3"
            android:layout_width="85dip"
            android:layout_height="wrap_content"
            style="@style/spinner_style"
            android:paddingRight="20dp"
            android:entries="@array/apm"
            android:popupBackground="#fff78c"
            tools:ignore="RtlHardcoded,RtlSymmetry"
            android:layout_alignBaseline="@+id/spinner_minutes2"
            android:layout_alignBottom="@+id/spinner_minutes2"
            android:layout_toEndOf="@+id/spinner_minutes" />

        <TextView
            android:id="@+id/text_timer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:visibility="gone" />

        <LinearLayout
            android:id="@+id/button_holder"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/spinner_minutes"
            android:layout_centerHorizontal="true"
            android:paddingTop="10dp"
            android:layout_marginTop="20dip">

            <Button
                android:id="@+id/button_set"
                android:layout_width="100dip"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dip"
                android:layout_marginLeft="10dip"
                android:text="الغاء"
                tools:ignore="ButtonStyle,HardcodedText,RtlHardcoded" />

            <Button
                android:id="@+id/button_cancel"
                android:layout_width="100dip"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dip"
                android:layout_marginRight="10dip"
                android:text="إرسال"
                tools:ignore="ButtonOrder,ButtonStyle,HardcodedText,RtlHardcoded" />
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>


//calss  Fragment:


public class Page_6Fragment extends android.support.v4.app.Fragment implements AdapterView.OnItemSelectedListener {
    TextView t1,t2,t3,t4;
    Spinner spin ,spin2,spin3,spin4;
    Dialog dialog;
    RecyclerView recyclerView;
    List<Customer> customers;
    CustomerAdapter adapter;
    View rootView;
    String TAG = "MainActivity - ";
    Context context;
    API api;
    Activity a;

    public static Page_6Fragment newInstance() {
        Page_6Fragment fragment = new Page_6Fragment();
        return fragment;
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      rootView = inflater.inflate(R.layout.activity_customer, container, false);
        //   View rootView = inflater.inflate(R.xml.pref, container, false);
        //  Intent intent = new Intent(PreferenceDemoActivity.this,PrefsActivity.class);
        // startActivity(intent);

        this.context = getActivity();
        recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);
        customers = new ArrayList<>();
        adapter = new CustomerAdapter(context, customers);

        adapter.setLoadMoreListener(new CustomerAdapter.OnLoadMoreListener(){
            @Override
            public void onLoadMore() {
                recyclerView.post(new Runnable() {
                    @Override
                    public void run() {
                        int index = customers.size() - 1;
                      loadMore(index);
                    }
                });
                //Calling loadMore function in Runnable to fix the
                // java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling error
            }
        });

        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(context));
        //recyclerView.addItemDecoration(new VerticalLineDecorator(2));
        recyclerView.setAdapter(adapter);
        api = ServiceGenerator.createService(API.class);
        load(0);
        return rootView;
    }
    private void load(int index){
        Call<List<Customer>> call = api.getCustomer(index);
        call.enqueue(new Callback<List<Customer>>(){
            @Override
            public void onResponse(Call<List<Customer>> call, Response<List<Customer>> response){
            // Toast.makeText(getActivity(), "tost "+response.body().get(0).post_writer, Toast.LENGTH_LONG).show();
               // Log.i("TRUE_TRUE","Yes"+response.body().get(0).title);
                if(response.isSuccessful()){
                    customers.addAll(response.body());
                    adapter.notifyDataChanged();
                    // Toast.makeText(MainActivity.this, "tost "+response.body().get(0).post_writer, Toast.LENGTH_LONG).show();
                }else{
                    Log.e(TAG," Response Error "+String.valueOf(response.code()));
                }
            }
            @Override
            public void onFailure(Call<List<Customer>> call, Throwable t) {
                Log.e(TAG," Response Error "+t.getMessage());
            }
        });
    }

    private void loadMore(int index){
        //add loading progress view
        customers.add(new Customer("load"));
        adapter.notifyItemInserted(customers.size()-1);
        Call<List<Customer>>call =  api.getCustomer(index);
        call.enqueue(new Callback<List<Customer>>(){
            @Override
            public void onResponse(Call<List<Customer>> call, Response<List<Customer>>response) {
                if(response.isSuccessful()){
                    // remove loading view .......
                    customers.remove(customers.size()-1);
                    List<Customer>result=response.body();
                    if(result.size()>0){
                        // add loaded data
                        customers.addAll(result);
                    }else{//result size 0 means there is no more data available at server
                        adapter.setMoreDataAvailable(false);
                        //telling adapter to stop calling load more as no more server data available
                        Toast.makeText(context,"No More Data Available",Toast.LENGTH_LONG).show();
                    }
                    adapter.notifyDataChanged();
                }else{
                    Log.e(TAG," Load More Response Error "+String.valueOf(response.code()));
                }
            }
            @Override
            public void onFailure(Call<List<Customer>>call,Throwable t) {
                Log.e(TAG," Load More Response Error "+t.getMessage());
            }
        });
    }

    public void showDialog(Context context){
        dialog = new Dialog(context);
        dialog.setCancelable(true);
        dialog.setContentView(R.layout.layout);
        dialog.show();

        String[] bankNames = {
                "BO","SB","HD","PN","Bj"
        };
        t1= (TextView)dialog.findViewById(R.id.tv_h);
        t2= (TextView)dialog.findViewById(R.id.tv_m);
        t3= (TextView)dialog.findViewById(R.id.tv_title);
        t4= (TextView)dialog.findViewById(R.id.tv_pam);
        spin =(Spinner)dialog.findViewById(R.id.spinner_minutes);
        spin2 =(Spinner)dialog.findViewById(R.id.spinner_minutes2);
        spin3 =(Spinner)dialog.findViewById(R.id.spinner_minutes3);
        spin4 =(Spinner)dialog.findViewById(R.id.tex);
        spin.setOnItemSelectedListener(this);
        spin2.setOnItemSelectedListener(this);
        spin3.setOnItemSelectedListener(this);
        spin4.setOnItemSelectedListener(this);
        RadioButton radioButton2 = (RadioButton)dialog.findViewById(R.id.second2);
        RadioButton radioButton = (RadioButton)dialog.findViewById(R.id.second);
        RadioGroup radioGroup = (RadioGroup)dialog.findViewById(R.id.radioSex);
        ArrayAdapter<String> a = new ArrayAdapter<String>(context,R.layout.spinner_item,bankNames);
        //ArrayAdapter b = new ArrayAdapter(this,android.R.layout.simple_spinner_item,bankNames2);
        a.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spin.setAdapter(a);
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                RadioButton radioButton = (RadioButton)dialog.findViewById(checkedId);
                if (checkedId == R.id.second2) {
                    RadioYes();
                } else if (checkedId == R.id.second) {
                   RadioNo();
                }
            }
        });
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        ((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE);
        ((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE);
        ((TextView) parent.getChildAt(0)).setTextSize(16);
       // Toast.makeText(getApplicationContext(),"" +spin2.getSelectedItem(), Toast.LENGTH_LONG).show();
    }


    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }

    public void  RadioNo(){
        spin.setVisibility(View.VISIBLE);
        spin2.setVisibility(View.VISIBLE);
        spin3.setVisibility(View.VISIBLE);
        spin4.setVisibility(View.VISIBLE);
        t1.setVisibility(View.VISIBLE);
        t2.setVisibility(View.VISIBLE);
        t3.setVisibility(View.VISIBLE);
        t4.setVisibility(View.VISIBLE);
    }

    public void  RadioYes(){
        spin.setVisibility(View.GONE);
        spin2.setVisibility(View.GONE);
        spin3.setVisibility(View.GONE);
        spin4.setVisibility(View.GONE);
        t1.setVisibility(View.GONE);
        t2.setVisibility(View.GONE);
        t3.setVisibility(View.GONE);
        t4.setVisibility(View.GONE);
    }
}

// class to call function show dailoge 


public class CustomerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    public final int TYPE_MOVIE = 0;
    public final int TYPE_LOAD = 1;

    static Context context;
    List<Customer> customers;
    OnLoadMoreListener loadMoreListener;
    boolean isLoading = false, isMoreDataAvailable = true;

    public CustomerAdapter(Context context, List<Customer> customers) {
        this.context = context;
        this.customers = customers;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        LayoutInflater inflater = LayoutInflater.from(context);
        if(viewType==TYPE_MOVIE){
            return new CustomerHolder(inflater.inflate(R.layout.row_movie,parent,false));
        }else{
            return new LoadHolder(inflater.inflate(R.layout.row_load,parent,false));
        }
    }


    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {

        if(position>=getItemCount()-1 && isMoreDataAvailable && !isLoading && loadMoreListener!=null){
            isLoading = true;
            loadMoreListener.onLoadMore();
        }

        if(getItemViewType(position)==TYPE_MOVIE){
            ((CustomerHolder)holder).bindData(customers.get(position));
            if(((CustomerHolder)holder).buttonViewOption != null)((CustomerHolder)holder).buttonViewOption.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                  Page_6Fragment.newInstance().showDialog(context);
                }
            });
        }
    }

    @Override
    public int getItemViewType(int position) {
        if(customers.get(position).type.equals("movie")){
            return TYPE_MOVIE;
        }else{
            return TYPE_LOAD;
        }
    }


    @Override
    public int getItemCount(){

        return customers.size();
    }

    /* VIEW HOLDERS */

    static class CustomerHolder extends RecyclerView.ViewHolder{
        TextView tvTitle;
        TextView tvRating;
        Button buttonViewOption;

        public CustomerHolder(View itemView) {
            super(itemView);
            tvTitle=(TextView)itemView.findViewById(R.id.title);
            tvRating=(TextView)itemView.findViewById(R.id.rating);
            buttonViewOption = (Button) itemView.findViewById(R.id.textViewOptions);
        }

        void bindData(Customer cust){
           tvTitle.setText(cust.name);
           tvRating.setText(cust.title);
        }
    }

    static class LoadHolder extends RecyclerView.ViewHolder{
        public LoadHolder(View itemView) {
            super(itemView);
        }
    }

    public void setMoreDataAvailable(boolean moreDataAvailable) {
        isMoreDataAvailable = moreDataAvailable;
    }

    /* notifyDataSetChanged is final method so we can't override it
         call adapter.notifyDataChanged(); after update the list
    */

    public void notifyDataChanged(){
        notifyDataSetChanged();
        isLoading = false;
    }
    public interface OnLoadMoreListener{
        void onLoadMore();
    }
    public void setLoadMoreListener(OnLoadMoreListener loadMoreListener) {
        this.loadMoreListener = loadMoreListener;
    }
}

标签: javaandroidandroid-layoutandroid-fragments

解决方案


推荐阅读