Android
समन्वयकलेयआउट और व्यवहार
खोज…
परिचय
कोऑर्डिनेटर लयआउट एक सुपर-पावर्ड फ्रेम लयआउट है और इस व्यूग्रुप का लक्ष्य उन विचारों को समन्वित करना है जो इसके अंदर हैं।
CoordinatorLayout की मुख्य अपील एक्सएमएल फ़ाइल के भीतर विचारों के एनिमेशन और बदलाव को समन्वित करने की अपनी क्षमता है।
समन्वयक लयआउट दो प्राथमिक उपयोग मामलों के लिए अभिप्रेत है:
: एक शीर्ष-स्तरीय अनुप्रयोग सजावट या क्रोम लेआउट के रूप में
: एक या अधिक बच्चे के विचारों के साथ एक विशिष्ट बातचीत के लिए एक कंटेनर के रूप में
टिप्पणियों
CoordinatorLayout
एक कंटेनर है जो FrameLayout
विस्तार FrameLayout
।
एक संलग्न द्वारा CoordinatorLayout.Behavior
का एक सीधा बच्चे को CoordinatorLayout
, आप अवरोधन स्पर्श घटनाओं, खिड़की सन्निवेश वाली, माप, लेआउट, और नेस्टेड स्क्रॉल कर सकेंगे।
एक CoordinatorLayout
बच्चे के विचारों के लिए Behaviors
निर्दिष्ट करके आप एक ही माता-पिता के भीतर कई अलग-अलग बातचीत प्रदान कर सकते हैं और उन विचारों को एक दूसरे के साथ बातचीत भी कर सकते हैं। जब एक CoordinatorLayout
बच्चे के रूप में DefaultBehavior
एनोटेशन का उपयोग कर उपयोग किया जाता है, तो दृश्य कक्षाएं एक डिफ़ॉल्ट व्यवहार निर्दिष्ट कर सकती हैं।
एक साधारण व्यवहार बनाना
Behavior
बनाने के लिए CoordinatorLayout.Behavior
विस्तार करें।
समन्वयकलेयआउट.बेहेवियर का विस्तार करें
उदाहरण:
public class MyBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {
/**
* Default constructor.
*/
public MyBehavior() {
}
/**
* Default constructor for inflating a MyBehavior from layout.
*
* @param context The {@link Context}.
* @param attrs The {@link AttributeSet}.
*/
public MyBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
इस व्यवहार को एक बच्चे को एक CoordinatorLayout
दृश्य से CoordinatorLayout
की आवश्यकता है जिसे कॉल किया जाना है।
प्रोग्राम को व्यवहारिक रूप से संलग्न करें
MyBehavior myBehavior = new MyBehavior();
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) view.getLayoutParams();
params.setBehavior(myBehavior);
XML में एक व्यवहार संलग्न करें
XML में व्यवहार संलग्न करने के लिए आप layout_behavior
विशेषता का उपयोग कर सकते हैं:
<View
android:layout_height="...."
android:layout_width="...."
app:layout_behavior=".MyBehavior" />
स्वचालित रूप से एक व्यवहार संलग्न करें
यदि आप एक कस्टम दृश्य के साथ काम कर रहे हैं तो आप @CoordinatorLayout.DefaultBehavior
एनोटेशन का उपयोग करके व्यवहार को संलग्न कर सकते हैं:
@CoordinatorLayout.DefaultBehavior(MyBehavior.class)
public class MyView extends ..... {
}
SwipeDismissBehavior का उपयोग करना
SwipeDismissBehavior
एक साथ हमारे लेआउट में खारिज करने के लिए कड़ी चोट की कार्यक्षमता किसी भी देखें और औजार पर काम करता है CoordinatorLayout
।
महज प्रयोग करें:
final SwipeDismissBehavior<MyView> swipe = new SwipeDismissBehavior();
//Sets the swipe direction for this behavior.
swipe.setSwipeDirection(
SwipeDismissBehavior.SWIPE_DIRECTION_ANY);
//Set the listener to be used when a dismiss event occurs
swipe.setListener(
new SwipeDismissBehavior.OnDismissListener() {
@Override public void onDismiss(View view) {
//......
}
@Override
public void onDragStateChanged(int state) {
//......
}
});
//Attach the SwipeDismissBehavior to a view
LayoutParams coordinatorParams =
(LayoutParams) mView.getLayoutParams();
coordinatorParams.setBehavior(swipe);
दृश्य के बीच निर्भरता बनाएँ
विचारों के बीच निर्भरता बनाने के लिए आप CoordinatorLayout.Behavior
का उपयोग कर सकते हैं। आप एक View
को दूसरे View
से लंगर डाल सकते हैं:
-
layout_anchor
विशेषता का उपयोग करना। - एक कस्टम
Behavior
बनाने औरlayoutDependsOn
विधि को लागू करने के लिएtrue
वापसी।
उदाहरण के लिए, किसी अन्य के स्थानांतरित होने पर ImageView
को स्थानांतरित करने के लिए एक Behavior
बनाने के लिए (उदाहरण टूलबार), निम्न चरणों का पालन करें:
public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}
layoutDependsOn
ओवरराइडlayoutDependsOn
विधिtrue
लौटना। हर बार लेआउट में परिवर्तन होने पर इस विधि को कहा जाता है:@Override public boolean layoutDependsOn(CoordinatorLayout parent, ImageView child, View dependency) { // Returns true to add a dependency. return dependency instanceof Toolbar; }
जब भी विधि का
layoutDependsOn
true
, तो विधिonDependentViewChanged
को कहा जाता है:@Override public boolean onDependentViewChanged(CoordinatorLayout parent, ImageView child, View dependency) { // Implement here animations, translations, or movements; always related to the provided dependency. float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); child.setTranslationY(translationY); }