در مورد ConstraintLayout

پرسیده شده
فعالیت 1597 روز پیش
دیده شده 1135 بار
0

وقت بخیر 

در ConstraintLayout وقتی دو ویو text view  یا هر المان دیگری رو در زیر هم قرار میدیم،موقع برقراری اتصال بین المان ها نیاز هست اتصال دو طرفه باشه؟ این رو برای این میگم که نمیدونم چرا وقتی من فقط اتصال یکطرفه ایجاد میکنم المان به شدت جابجا میشن و کل تنظیم صفحه به هم میریزه

فایل پیوست

1
حذف شده

سلام 

جواب کوتاه : نه نیاز نیست دو طرفه فه باشه

اگر جواب بالا کافی نیست می تونید پایین رو  نگاه بندازید (نظر شخصی خودم اینه جواب کوتاه به هیچ عنوان واسه منه مبتدی خوب نیست چون اصلا هیچی به معلومات منه مبتدی در حوزه اندروید اضافه نمی کنه و اینکه جواب دهنده جوابی داده که بگه جواب دادم همین !)

ولی  حتما  باید شرط ها ی خودتون رو انجام بدید 

به صورت افقی  حداقل با ید یک شرط و بخ صورت عمودی حداقل باید یک شرط

اگر این حداقل ها رو رعایت نکنیم  خوده Android studio بهمون میگه این طرحی که ما طراحی  کردیم در لحظه است  یعنی وقتی اجرا بشه یه چیزی  مثل الان که طراحی کردیم نمی بینیم

می خوام دو تا Text View رو زیر هم قرار بدم وقتی پروژه رو ساختیم با یک صفحه مثل زیر رو به رو میشیم و بعد از حذف (TextView(hello worldلایه ی ریشه مون  ConstaraintLayout می باشد

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">


    
</androidx.constraintlayout.widget.ConstraintLayout>

من یک TextViewاضلفه میکنم و به شکل زیر میشه 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        tools:layout_editor_absoluteX="139dp"
        tools:layout_editor_absoluteY="120dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

الان هیچ شرطی نگذاشتیم  اگر در tab Design(پایین سمت چپ) بریم و در قسمت   Component tree و موس رو روی TextViewبزاریم با تصویر زیر رو به رو هستیم 

link

 که بهمون میگه این viewشرطی روی آن اعمال نشده و این موقعیتی که میبینیم فقط در این لحظه است اگر همینجوری اجرا بشه  وقت اجرا میره به نقطه 0و0 که همون بالا سمت چپ میشه پس من دو شرطه horizentalرو اعمال برای اینکه TextView به صورت افقی وسط باشد 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        app:layout_constraintEnd_toEndOf="parent" //از آخر به به اخر والد وصل بشودبه تعبیری آخرشون یکی باشه 
        app:layout_constraintStart_toStartOf="parent" //از شروع به شروع والدوصل بشودبه تعبیری اولشون یکی باشه  
        tools:layout_editor_absoluteY="120dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

یعنی الان TextView مابه شکل افقی  وسط چین شده ولی هنوز خطایی که داشتیم برطرف نشده چون که ما هنوز به صورت عمودی شرطی رو قید نکردیم پس

app:layout_constraintTop_toTopOf="parent" // قسمت بالاشون یکی بشه به تعبیری بالاشون از یک نقطه شروع بشود

به TextView اضافه میکنیم  و می چسبد به بالا برای اینکه  فاصله بگیرد یه Margin میدیم که از بالا فاصله بگیرد به اندازه50dp  

و یک TextView دیگه اضافه میکنیم شرط های  افقی را اعمال میکنیم تا به صورت افقی مثل بالا وسط چین بشود و اینکه بالا TextViewجدیدمون رو به پایین TextViewrقلیمون اضافه میکنیم تا زیر هم باشند 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:text="TExt view"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="test" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" //اینجا میاد بالای المانی که داخلشیم رو به پایین شناسه ای که ذکر میکنیم متصل میکنه
        />
</androidx.constraintlayout.widget.ConstraintLayout>

اگر بخوایم اینم از  TextViewبالا مون یه ذره  فاصله بگیر فاصله بگیره بیه اینم میتونیم layout_marginTopبدیم  

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="TextView" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        tools:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout>

اطلاعات اضافی در مورد ConstraintLayout

همان طور که مشخصه از کتابخانه androidx اضافه می شود 

یکی قدرتمند ترین لایه ها می باشد 

در سال 2016 در کنفرانسGoogle i/oمعرفی شد 

با api = 9 به بعد مشکلی ندارد 

میتونید اینجا بیشتر  بخونید

 

فایل پیوست

مهرداد

توسط

مهرداد

22 آذر 98

1
حذف شده

وقتی دو تا view زیر هم قرار بگیرن  و قرار باشه با هم از وسط تراز باشن، باید از هر دو طرف align شده باشه، یعنی دو طرفه باشه

فایل پیوست

سعید شاهینی

توسط

سعید شاهینی

22 آذر 98

حذف شده
استاد ایشون نگفتند که وسط قرار بگیره که واینکه استاد لطفا اکانت تلگرامتون رو نگاه کنید
مهرداد

22 آذر 98

0
حذف شده

ممنون از توضیحات کاملتون مهرداد جان و همچنین از استاد عزیز، اما فکر کنم سوالم رو بد پرسیدم، منظور من این هست که به طور مثال:دو ویوو در صفحه داریم و میخوایم با شرط اتصال بین این ویوو ها رو با هم برقرار کنیم، من ویوو پایینی رو به ویوو بالایی متصل کردم، نیازی هست همین کار رو برای ویوو بالایی کنم یعنی ویوو بالایی رو هم به ویوو پایینی متصل کنم یا به عبارتی اتصال دو طرفه ایجاد کنم؟

دلیل این سوال برای این هست که من پروژه ای که استاد آموزش دادن رو ساختم وقتی اتصال بین ویووها یک طرفه بود ، بعضی از ویوو ها موقع در خروجی به هم ریخته نشون داده می شدند ولی وقتی اتصال رو دو طرفه کردم ، به سختی اما درست شد.

نکته: من صحبتی از شرط افقی نکردم و فقط فعلا دارم در مورد اتصال عمودی ویوو ها صحبت می کنم.

فایل پیوست

ابوالفضل محمد قاسمی

توسط

ابوالفضل محمد قاسمی

22 آذر 98

حذف شده
خواهش میکنم.نیازی نیست همونطور که بالا هم گفتم :-) به خاطر همین رو دوتا textview با تقریبا 50درصد چیزهایی که باید گفته بشود نشون دادم که خودتون هم آزمایش کنید .اما سوال شما چرا طراحی شما به هم میریزه؟ احتمالا دقیق مثل فیلم نرفتید یه ذره اشتباه ممکنه خراب کنه طرح رو.
مهرداد

22 آذر 98