Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में TextView का लेआउट वेट प्रोग्रामेटिकली कैसे सेट करें?

एंड्रॉइड में प्रोग्रामेटिकली Layout Weight सेट करना

Layout Weight (android:layout_weight) केवल LinearLayout (या उसके सबक्लास) के चाइल्ड व्यूज पर काम करता है — RelativeLayout, ConstraintLayout, FrameLayout में इसका कोई प्रभाव नहीं पड़ता। मूल लेख का उदाहरण RelativeLayout में बटन का वेट सेट करने की कोशिश करता है, जो **काम नहीं करेगा**। यह ट्यूटोरियल सही तरीका दिखाता है।

⚠️ सामान्य गलती

RelativeLayout.LayoutParams में **weight फील्ड नहीं होता**। button.setLayoutParams(new RelativeLayout.LayoutParams(...)) में weight पास करने का कोई असर नहीं होगा।

चरण 1: नया प्रोजेक्ट बनाएं

Android Studio → File → New → New Project → "Empty Activity" → Finish।

चरण 2: सही Layout — LinearLayout उपयोग करें (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="24dp"
    android:gravity="center">

    <!-- वेट के साथ बटन्स -->
    <Button
        android:id="@+id/btnOne"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="वेट 1 (1/3 भाग)"
        android:textSize="16sp" />

    <Button
        android:id="@+id/btnTwo"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:text="वेट 2 (2/3 भाग)"
        android:textSize="16sp" />

    <Button
        android:id="@+id/btnChangeWeight"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:text="प्रोग्रामेटिकली वेट बदलें (1↔2)"
        android:textSize="16sp" />

</LinearLayout>

चरण 3: MainActivity.java — प्रोग्रामेटिकली वेट बदलें

package com.example.layoutweightdemo;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private Button btnOne, btnTwo, btnChangeWeight;
    private boolean weightToggled = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnOne = findViewById(R.id.btnOne);
        btnTwo = findViewById(R.id.btnTwo);
        btnChangeWeight = findViewById(R.id.btnChangeWeight);

        btnChangeWeight.setOnClickListener(v -> toggleWeights());
    }

    private void toggleWeights() {
        // LinearLayout.LayoutParams प्राप्त करें (कास्ट जरूरी)
        LinearLayout.LayoutParams params1 = (LinearLayout.LayoutParams) btnOne.getLayoutParams();
        LinearLayout.LayoutParams params2 = (LinearLayout.LayoutParams) btnTwo.getLayoutParams();

        if (!weightToggled) {
            // वेट स्वैप करें: btnOne=2, btnTwo=1
            params1.weight = 2f;
            params2.weight = 1f;
            btnChangeWeight.setText("वेट रीसेट करें (1↔2)");
        } else {
            // वापस मूल: btnOne=1, btnTwo=2
            params1.weight = 1f;
            params2.weight = 2f;
            btnChangeWeight.setText("प्रोग्रामेटिकली वेट बदलें (1↔2)");
        }

        // बदलाव लागू करें
        btnOne.setLayoutParams(params1);
        btnTwo.setLayoutParams(params2);
        weightToggled = !weightToggled;
    }
}

चरण 4: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.layoutweightdemo">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.LayoutWeightDemo">

        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

चलाएं और टेस्ट करें

  1. ऐप खोलें — दो बटन्स 1:2 अनुपात में ऊंचाई बांटेंगे (btnOne छोटा, btnTwo बड़ा)।
  2. "प्रोग्रामेटिकली वेट बदलें" दबाएं — अनुपात उलट जाएगा (btnOne बड़ा, btnTwo छोटा)।
  3. दोबारा दबाएं — वापस मूल।

🔑 मुख्य बिंदु

कॉन्सेप्टनियम
Parent LayoutLinearLayout (horizontal/vertical) होना चाहिए
Child Height/Widthजिस डायमेंशन में वेट लागू हो, उसे 0dp सेट करें
LayoutParams क्लासLinearLayout.LayoutParams उपयोग करें — पैरेंट के अनुसार
Weight टाइपfloat (उदाहरण: 1f, 2.5f)
कास्टिंग(LinearLayout.LayoutParams) view.getLayoutParams() — गलत क्लास से ClassCastException

💡 ConstraintLayout में वेट जैसा व्यवहार

ConstraintLayout में layout_weight नहीं होता, लेकिन चेन (Chains) + layout_constraintWidth_percent या app:layout_constraintHorizontal_weight से समान प्रभाव पा सकते हैं:

<androidx.constraintlayout.widget.ConstraintLayout ...>

    <Button
        android:id="@+id/btnA"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintHorizontal_weight="1"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="@id/btnB"
        android:text="Weight 1" />

    <Button
        android:id="@+id/btnB"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintHorizontal_weight="2"
        app:layout_constraintStart_toEndOf="@id/btnA"
        app:layout_constraintEnd_toEndOf="parent"
        android:text="Weight 2" />

</androidx.constraintlayout.widget.ConstraintLayout>

प्रोग्रामेटिकली (Kotlin):

val params = btnA.layoutParams as ConstraintLayout.LayoutParams
params.horizontalWeight = 2f
btnA.layoutParams = params

सारांश

  • ❌ RelativeLayout, ConstraintLayout, FrameLayout में layout_weight **काम नहीं करता**।
  • ✅ केवल LinearLayout (vertical/horizontal) में काम करता है।
  • ✅ प्रोग्रामेटिकली: LinearLayout.LayoutParams कास्ट करें → .weight = value → setLayoutParams()।
  • 🔄 ConstraintLayout में horizontalWeight/verticalWeight + चेन्स उपयोग करें।
  1. प्रोग्रामेटिकली वर्तमान Android SDK वर्जन कैसे प्राप्त करें? प्रोग्रामेटिकली वर्तमान Android SDK वर्जन कैसे प्राप्त करें?

    Android में प्रोग्रामेटिकली SDK वर्जन जानना यह ट्यूटोरियल दिखाता है कि कैसे रनटाइम पर डिवाइस का API लेवल और Android वर्जन प्राप्त किया जाता है, जो वर्जन-स्पेसिफिक फीचर्स इम्प्लीमेंट करने के लिए जरूरी है। चरण 1: प्रोजेक्ट बनाएं Android Studio में नया प्रोजेक्ट बनाएं। चरण 2: लेआउट में TextView res/l

  1. एंड्रॉइड में वर्तमान में चल रहे ऐप्स प्रोग्रामेटिकली कैसे खोजें एंड्रॉइड में वर्तमान में चल रहे ऐप्स प्रोग्रामेटिकली कैसे खोजें

    ActivityManager का उपयोग करके चल रहे टास्क्स/ऐप्स की सूची प्राप्त करना एंड्रॉइड में ActivityManager.getRunningTasks() और getRunningAppProcesses() का उपयोग करके चल रहे एप्लिकेशन की जानकारी प्राप्त की जा सकती है। नोट: एंड्रॉइड 5.0+ (API 21) में getRunningTasks() डिप्रिकेटेड है और केवल कॉलर के अपने टास

  1. Android में ScrollView को प्रोग्रामेटिकली कैसे डिसेबल करें? Android में ScrollView को प्रोग्रामेटिकली कैसे डिसेबल करें?

    परिचय यह उदाहरण दर्शाता है कि Android में ScrollView को प्रोग्रामेटिक रूप से कैसे डिसेबल किया जाए। हम OnTouchListener का उपयोग करके टच इवेंट को इंटरसेप्ट करेंगे। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project के माध्यम से नया प्रोजेक्ट बनाएं। चरण 2: लेआउट XML में ScrollView res/l