অ্যান্ড্রয়েড: কীভাবে প্রোগ্রামিয়ালি কোনও লেআউটের আকার সেট করবেন


145

অ্যান্ড্রয়েড অ্যাপের অংশ হিসাবে আমি একটি বোতাম সেট তৈরি করছি। বোতামগুলি লিনিয়ারলআউটগুলির নেস্টেড সেটগুলির অংশ। ওজন ব্যবহার করে আমার ধারণকৃত পৈত্রিক লিনিয়ারলআউটটির আকারের ভিত্তিতে স্বয়ংক্রিয়ভাবে সেটটি পুনরায় আকার দিচ্ছে। ধারণাটি হ'ল পিক্সেল গণনা এবং পর্দার ঘনত্বের উপর ভিত্তি করে, সংযুক্ত বিন্যাসের আকারকে বেশ কয়েকটি পিক্সেলে সেট করতে; এবং সেই পরিবর্তনের উপর ভিত্তি করে নিজের বোতাম সেটটি পুনরায় আকার দিন।

তারপরে প্রশ্নটি হল: কীভাবে বিন্যাসটিকে পুনরায় আকার দিন।

আমি বেশ কয়েকটি প্রস্তাবিত কৌশল চেষ্টা করেছি এবং কোনওটিই কাজের ঘনিষ্ঠ হয় না। এখানে এক্সএমএলের একটি উপসেট রয়েছে যা বোতাম সেটটি তৈরি করে:

    <LinearLayout android:layout_height="104pt" android:id="@+id/numberPadLayout" android:orientation="horizontal" android:layout_width="104pt"
    android:background="#a0a0a0"
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true"
>

    <LinearLayout android:layout_weight="2" android:layout_height="fill_parent" android:id="@+id/linearLayout1" android:orientation="vertical" android:layout_width="wrap_content">
        <Button android:text="1" android:id="@+id/button1" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
        <Button android:text="4" android:id="@+id/button4" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
        <Button android:text="7" android:id="@+id/button7" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
        <Button android:text="-" android:id="@+id/buttonDash" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
    </LinearLayout>
    <LinearLayout android:layout_weight="2" android:layout_height="fill_parent" android:id="@+id/linearLayout2" android:orientation="vertical" android:layout_width="wrap_content">
        <Button android:text="2" android:id="@+id/button2" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
        <Button android:text="5" android:id="@+id/button5" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
        <Button android:text="8" android:id="@+id/button8" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
        <Button android:text="0" android:id="@+id/button0" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
    </LinearLayout>

    <LinearLayout android:layout_weight="2" android:layout_height="fill_parent" android:id="@+id/linearLayout3" android:orientation="vertical" android:layout_width="wrap_content">
        <Button android:text="3" android:id="@+id/button3" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
        <Button android:text="6" android:id="@+id/button6" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
        <Button android:text="9" android:id="@+id/button9" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
        <Button android:text="." android:id="@+id/buttonDot" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
    </LinearLayout>
    <LinearLayout android:layout_weight="2" android:layout_height="fill_parent" android:id="@+id/linearLayout4" android:orientation="vertical" android:layout_width="wrap_content">
        <Button android:text="/" android:id="@+id/buttonBack" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
        <Button android:text="\" android:id="@+id/buttonEnter" android:layout_weight="2" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
    </LinearLayout>

</LinearLayout>    

দুটি প্রশ্ন হ'ল: 1) আমি জাভা থেকে কীভাবে প্যাডলয়আউটে অ্যাক্সেস পাব? এবং একবার আমার ভিউতে অ্যাক্সেস হয়ে গেলে, ২) কীভাবে আমি বিন্যাসটির উচ্চতা এবং প্রস্থ পরিবর্তন করব।

কোন পরামর্শ প্রশংসা করা হবে।

উত্তর:


390

জাভা

এই কাজ করা উচিত:

// Gets linearlayout
LinearLayout layout = findViewById(R.id.numberPadLayout);
// Gets the layout params that will allow you to resize the layout
LayoutParams params = layout.getLayoutParams();
// Changes the height and width to the specified *pixels*
params.height = 100;
params.width = 100;
layout.setLayoutParams(params);

আপনি যদি ডিপকে পিক্সেলে রূপান্তর করতে চান তবে এটি ব্যবহার করুন:

int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, <HEIGHT>, getResources().getDisplayMetrics());

Kotlin


9
আপনাকে ধন্যবাদ, আমার প্রয়োজন মতো এটিই ছিল। আমি আমার অনুমানের সাথে ভুল হয়ে গেছে বলে মনে হচ্ছে যে এটির কাজ করার জন্য আমাকে প্যারামিটারগুলি লেআউটটিতে ফিরে প্রয়োগ করতে হবে।
কোডিংগেট

1
এটিকে স্ট্যাকওভারফ্লো.com/a/8171014/9648 এর সাথে একত্রিত করুন যদি আপনার অন্যান্য দর্শনের গণনা করা মানগুলির ভিত্তিতে পরিবর্তন করতে হয়।
জনিলম্বদা

1
এটা কাজ করে না. আমার লেআউটের প্রস্থটি 2000 I আমি যখন প্রিন্ট আউট করি layout.getWidth()তখনও আমি 2000 রেখে দিই যদিওparams.width=1000

2
^ লেআউট.সেটলয়আউটপ্যারামস (প্যারামস);
কাজ করেছেন

62

আমার নমুনা কোড

wv = (WebView) findViewById(R.id.mywebview);
wv.getLayoutParams().height = LayoutParams.MATCH_PARENT; // LayoutParams: android.view.ViewGroup.LayoutParams
// wv.getLayoutParams().height = LayoutParams.WRAP_CONTENT;
wv.requestLayout();//It is necesary to refresh the screen

আপনি যেমন কর্ডোভা অ্যাপ্লিকেশনগুলিতে ব্যবহার করেন তেমন ওয়েবভিউয়ের গন্ধ হয় না?
y_nk

1
requestLayout()এটা আমার জন্য!
নিকগজজর

5
LinearLayout YOUR_LinearLayout =(LinearLayout)findViewById(R.id.YOUR_LinearLayout)
    LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
                       /*width*/ ViewGroup.LayoutParams.MATCH_PARENT,
               /*height*/ 100,
               /*weight*/ 1.0f
                );
                YOUR_LinearLayout.setLayoutParams(param);

2

আপনি এই কোডটি দিয়ে ডাকা লেআউটের প্রকৃত উচ্চতা পেতে পারেন:

public int getLayoutSize() {
// Get the layout id
    final LinearLayout root = (LinearLayout) findViewById(R.id.mainroot);
    final AtomicInteger layoutHeight = new AtomicInteger();

    root.post(new Runnable() { 
    public void run() { 
        Rect rect = new Rect(); 
        Window win = getWindow();  // Get the Window
                win.getDecorView().getWindowVisibleDisplayFrame(rect);

                // Get the height of Status Bar
                int statusBarHeight = rect.top;

                // Get the height occupied by the decoration contents 
                int contentViewTop = win.findViewById(Window.ID_ANDROID_CONTENT).getTop();

                // Calculate titleBarHeight by deducting statusBarHeight from contentViewTop  
                int titleBarHeight = contentViewTop - statusBarHeight; 
                Log.i("MY", "titleHeight = " + titleBarHeight + " statusHeight = " + statusBarHeight + " contentViewTop = " + contentViewTop); 

                // By now we got the height of titleBar & statusBar
                // Now lets get the screen size
                DisplayMetrics metrics = new DisplayMetrics();
                getWindowManager().getDefaultDisplay().getMetrics(metrics);   
                int screenHeight = metrics.heightPixels;
                int screenWidth = metrics.widthPixels;
                Log.i("MY", "Actual Screen Height = " + screenHeight + " Width = " + screenWidth);   

                // Now calculate the height that our layout can be set
                // If you know that your application doesn't have statusBar added, then don't add here also. Same applies to application bar also 
                layoutHeight.set(screenHeight - (titleBarHeight + statusBarHeight));
                Log.i("MY", "Layout Height = " + layoutHeight);   

            // Lastly, set the height of the layout       
            FrameLayout.LayoutParams rootParams = (FrameLayout.LayoutParams)root.getLayoutParams();
            rootParams.height = layoutHeight.get();
            root.setLayoutParams(rootParams);
        }
    });

return layoutHeight.get();
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.