मैंने नई सामग्री डिज़ाइन साइड नव कल्पना में देखा है कि आप ड्रॉअर को एक्शन बार और स्टेटस बार के पीछे प्रदर्शित कर सकते हैं। मैं इसे कैसे लागू कर सकता हूं?
मैंने नई सामग्री डिज़ाइन साइड नव कल्पना में देखा है कि आप ड्रॉअर को एक्शन बार और स्टेटस बार के पीछे प्रदर्शित कर सकते हैं। मैं इसे कैसे लागू कर सकता हूं?
जवाबों:
फ्रेमवर्क और सपोर्ट लिबास में नई कार्यक्षमता बिल्कुल इसकी अनुमति देती है। तीन 'पहेली के टुकड़े' हैं:
fitsSystemWindows
ताकि यह सिस्टम सलाखों के पीछे बिछाया जाए।Theme.Material
सामान्य स्थिति बार रंग को अक्षम करना ताकि ड्रॉयरलैट वहां के बजाय आकर्षित कर सके।मुझे लगता है कि आप नए appcompat का उपयोग करेंगे।
सबसे पहले, आपका लेआउट इस तरह दिखना चाहिए:
<!-- The important thing to note here is the added fitSystemWindows -->
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<!-- Your normal content view -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- We use a Toolbar so that our drawer can be displayed
in front of the action bar -->
<android.support.v7.widget.Toolbar
android:id="@+id/my_awesome_toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary" />
<!-- The rest of your content view -->
</LinearLayout>
<!-- Your drawer view. This can be any view, LinearLayout
is just an example. As we have set fitSystemWindows=true
this will be displayed under the status bar. -->
<LinearLayout
android:layout_width="304dp"
android:layout_height="match_parent"
android:layout_gravity="left|start"
android:fitsSystemWindows="true">
<!-- Your drawer content -->
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
फिर आपकी गतिविधि / प्रगति में:
public void onCreate(Bundled savedInstanceState) {
super.onCreate(savedInstanceState);
// Your normal setup. Blah blah ...
// As we're using a Toolbar, we should retrieve it and set it
// to be our ActionBar
Toolbar toolbar = (...) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
// Now retrieve the DrawerLayout so that we can set the status bar color.
// This only takes effect on Lollipop, or when using translucentStatusBar
// on KitKat.
DrawerLayout drawerLayout = (...) findViewById(R.id.my_drawer_layout);
drawerLayout.setStatusBarBackgroundColor(yourChosenColor);
}
फिर आपको यह सुनिश्चित करने की आवश्यकता है कि ड्रॉअरलेआउट स्थिति बार के पीछे दिखाई दे रहा है। आप ऐसा करते हैं कि अपने मानों को बदलकर-v21 विषय:
मान-V21 / themes.xml
<style name="Theme.MyApp" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
नोट: यदि <fragment android:name="fragments.NavigationDrawerFragment">
इसके बजाय एक का उपयोग किया जाता है
<LinearLayout
android:layout_width="304dp"
android:layout_height="match_parent"
android:layout_gravity="left|start"
android:fitsSystemWindows="true">
<!-- Your drawer content -->
</LinearLayout>
वास्तविक लेआउट, वांछित प्रभाव प्राप्त किया जाएगा यदि आप fitsSystemWindows(boolean)
उस दृश्य पर कॉल करते हैं जिसे आप onCreateView
विधि से वापस करते हैं ।
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View mDrawerListView = inflater.inflate(
R.layout.fragment_navigation_drawer, container, false);
mDrawerListView.setFitsSystemWindows(true);
return mDrawerListView;
}
DrawerLayout
सिस्टम बार के पीछे इसे बिछाने की जरूरत है। फिर आपको इसे दराज के दृश्य पर सेट करने की आवश्यकता होती है ताकि DrawerLayout
इसे खिड़की के भीतर से बाहर कर दिया जाए ।
layout_marginTop
में अपने ड्रॉअर कंटेंट के लेआउट की जड़ में एक नकारात्मक का उपयोग करने की आवश्यकता है । अन्यथा, आपके ड्रॉअर कंटेंट के लेआउट की पृष्ठभूमि स्टेटस बार के ऊपर खींची जाएगी, और बाकी सब कुछ नीचे धकेल दिया जाएगा। यह हालांकि एक थोड़े सकल समाधान की तरह लगता है, जहाँ तक मुझे पता है कि कोई भी नहीं है? Attr / statusBarSize या ऐसा कुछ भी जो एंड्रॉइड द्वारा आपूर्ति किया गया हो।
यह अब नए एंड्रॉइड डिज़ाइन सपोर्ट लाइब्रेरी का उपयोग करके प्राप्त किया जा सकता है ।
आप क्रिस बेंस द्वारा चीज़केयर का नमूना ऐप देख सकते हैं जो सभी नई सुविधाओं को प्रदर्शित करता है।
चूंकि कोई पूर्ण समाधान पोस्ट नहीं किया गया है, यहां वह तरीका है जिससे मैंने वांछित परिणाम प्राप्त किया।
पहले अपने प्रोजेक्ट में एक ScrimInsetsFrameLayout शामिल करें।
/*
* Copyright 2014 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* A layout that draws something in the insets passed to
* {@link #fitSystemWindows(Rect)}, i.e. the area above UI chrome
* (status and navigation bars, overlay action bars).
*/
public class ScrimInsetsFrameLayout extends FrameLayout {
private Drawable mInsetForeground;
private Rect mInsets;
private Rect mTempRect = new Rect();
private OnInsetsCallback mOnInsetsCallback;
public ScrimInsetsFrameLayout(Context context) {
super(context);
init(context, null, 0);
}
public ScrimInsetsFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0);
}
public ScrimInsetsFrameLayout(
Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs, defStyle);
}
private void init(Context context, AttributeSet attrs, int defStyle) {
final TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.ScrimInsetsView, defStyle, 0);
if (a == null) {
return;
}
mInsetForeground = a.getDrawable(
R.styleable.ScrimInsetsView_insetForeground);
a.recycle();
setWillNotDraw(true);
}
@Override
protected boolean fitSystemWindows(Rect insets) {
mInsets = new Rect(insets);
setWillNotDraw(mInsetForeground == null);
ViewCompat.postInvalidateOnAnimation(this);
if (mOnInsetsCallback != null) {
mOnInsetsCallback.onInsetsChanged(insets);
}
return true; // consume insets
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
int width = getWidth();
int height = getHeight();
if (mInsets != null && mInsetForeground != null) {
int sc = canvas.save();
canvas.translate(getScrollX(), getScrollY());
// Top
mTempRect.set(0, 0, width, mInsets.top);
mInsetForeground.setBounds(mTempRect);
mInsetForeground.draw(canvas);
// Bottom
mTempRect.set(0, height - mInsets.bottom, width, height);
mInsetForeground.setBounds(mTempRect);
mInsetForeground.draw(canvas);
// Left
mTempRect.set(
0,
mInsets.top,
mInsets.left,
height - mInsets.bottom);
mInsetForeground.setBounds(mTempRect);
mInsetForeground.draw(canvas);
// Right
mTempRect.set(
width - mInsets.right,
mInsets.top, width,
height - mInsets.bottom);
mInsetForeground.setBounds(mTempRect);
mInsetForeground.draw(canvas);
canvas.restoreToCount(sc);
}
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (mInsetForeground != null) {
mInsetForeground.setCallback(this);
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (mInsetForeground != null) {
mInsetForeground.setCallback(null);
}
}
/**
* Allows the calling container to specify a callback for custom
* processing when insets change (i.e. when {@link #fitSystemWindows(Rect)}
* is called. This is useful for setting padding on UI elements
* based on UI chrome insets (e.g. a Google Map or a ListView).
* When using with ListView or GridView, remember to set
* clipToPadding to false.
*/
public void setOnInsetsCallback(OnInsetsCallback onInsetsCallback) {
mOnInsetsCallback = onInsetsCallback;
}
public static interface OnInsetsCallback {
public void onInsetsChanged(Rect insets);
}
}
फिर एक स्टाइलिबल बनाएं ताकि insetForeground
सेट किया जा सके।
मान / attrs.xml
<declare-styleable name="ScrimInsetsView">
<attr name="insetForeground" format="reference|color" />
</declare-styleable>
अपनी गतिविधि की xml फ़ाइल को अपडेट करें और सुनिश्चित करें कि android:fitsSystemWindows
दोनों के DrawerLayout
साथ-साथ सही पर सेट है ScrimInsetsFrameLayout
।
लेआउट / activity_main.xml
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<!-- The main content view -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- Your main content -->
</LinearLayout>
<!-- The navigation drawer -->
<com.example.app.util.ScrimInsetsFrameLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/scrimInsetsFrameLayout"
android:layout_width="320dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/white"
android:elevation="10dp"
android:fitsSystemWindows="true"
app:insetForeground="#4000">
<!-- Your drawer content -->
</com.example.app.util.ScrimInsetsFrameLayout>
</android.support.v4.widget.DrawerLayout>
अपनी गतिविधि के ऑनक्रिएट मेथड के अंदर ड्रॉअर लेआउट पर स्टेटस बार बैकग्राउंड कलर सेट करें।
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ...
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
mDrawerLayout.setStatusBarBackgroundColor(
getResources().getColor(R.color.primary_dark));
}
अंत में अपने ऐप के थीम को अपडेट करें ताकि DrawerLayout
स्टेटस बार के पीछे हो।
मान-V21 / styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
परिणाम:
नवीनतम एंड्रॉइड सपोर्ट लाइब्रेरी (22.2.0 के बाद) की रिलीज़ के साथ हमें एक डिज़ाइन सपोर्ट लाइब्रेरी मिल गई है और इस के एक नए भाग के रूप में नेविगेशनवीव्यू कहा जाता है । इसलिए हम अपने ScrimInsetsFrameLayout
और अपने सभी सामानों के साथ सब कुछ करने के बजाय बस इस दृश्य का उपयोग करते हैं और सब कुछ हमारे लिए किया जाता है।
Design Support Library
अपनी build.gradle
फ़ाइल में जोड़ें
dependencies {
// Other dependencies like appcompat
compile 'com.android.support:design:22.2.0'
}
NavigationView
अपने में जोड़ें DrawerLayout
:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"> <!-- this is important -->
<!-- Your contents -->
<android.support.design.widget.NavigationView
android:id="@+id/navigation"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/navigation_items" /> <!-- The items to display -->
</android.support.v4.widget.DrawerLayout>
एक नया मेनू-संसाधन बनाएं /res/menu
और उन वस्तुओं और चिह्नों को जोड़ें जिन्हें आप प्रदर्शित करना चाहते हैं:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_home"
android:icon="@drawable/ic_action_home"
android:title="Home" />
<item
android:id="@+id/nav_example_item_1"
android:icon="@drawable/ic_action_dashboard"
android:title="Example Item #1" />
</group>
<item android:title="Sub items">
<menu>
<item
android:id="@+id/nav_example_sub_item_1"
android:title="Example Sub Item #1" />
</menu>
</item>
</menu>
नेवीगेशन देखें और घटनाओं पर क्लिक करें:
public class MainActivity extends AppCompatActivity {
NavigationView mNavigationView;
DrawerLayout mDrawerLayout;
// Other stuff
private void init() {
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mNavigationView = (NavigationView) findViewById(R.id.navigation_view);
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
mDrawerLayout.closeDrawers();
menuItem.setChecked(true);
switch (menuItem.getItemId()) {
case R.id.nav_home:
// TODO - Do something
break;
// TODO - Handle other items
}
return true;
}
});
}
}
सेट करना सुनिश्चित करें android:windowDrawsSystemBarBackgrounds
और android:statusBarColor
में values-v21
अन्यथा अपने दराज "के तहत" स्थिति प्रदर्शित किया नहीं होगा
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Other attributes like colorPrimary, colorAccent etc. -->
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
नेवीगेशन में एक हेडर जोड़ें। इसके लिए बस एक नया लेआउट बनाएं और app:headerLayout="@layout/my_header_layout"
नेविगेशन में जोड़ें ।
colorPrimary
विशेषताtextColorPrimary
विशेषताtextColorSecondary
विशेषतातुम भी जाँच कर सकते हैं उदाहरण एप्लिकेशन द्वारा क्रिस बेंस जो अन्य नए विचारों कि डिजाइन समर्थन लाइब्रेरी (जैसे का हिस्सा हैं के साथ NavigationView पर प्रकाश डाला गया FloatingActionButton , TextInputLayout , Snackbar , TabLayout आदि)
<item name="itemTextColor">@color/YOUR_COLOR</item>
<item name="itemIconTint">@color/YOUR_COLOR</item>
Toolbar
- ऐसा करने का कोई तरीका नहीं हैActionBar
mDrawerLayout.openDrawer(GravityCompat.START);
आप जहां चाहें बस कॉल करें । यदि आप इसका उपयोग कर रहे हैं ActionBarDrawerToggle
तो हैमबर्गर आइकन पर क्लिक करते ही इसे स्वचालित रूप से किया जाना चाहिए।
मान-v21 शैलियों या विषय xml में इस विशेषता का उपयोग करने के लिए इसे काम करें:
<item name="android:windowTranslucentStatus">true</item>
कि जादू करो!
उपरोक्त सभी दृष्टिकोण सही हैं और काम कर रहे हैं। मैंने उपरोक्त गाइड का अनुसरण करते हुए एक कार्यशील डेमो बनाया है और 2.x से 5.x पर परीक्षण किया है
आप गितुब से क्लोन कर सकते हैं
आसपास खेलने के लिए महत्वपूर्ण चीज मुख्य गतिविधि में है
toolbar = (Toolbar) findViewById(R.id.toolbar);
res = this.getResources();
this.setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ScrimInsetsFrameLayout scrimInsetsFrameLayout = (ScrimInsetsFrameLayout)
findViewById(R.id.linearLayout);
scrimInsetsFrameLayout.setOnInsetsCallback(this);
}
और वापस बुलाओ
@Override
public void onInsetsChanged(Rect insets) {
Toolbar toolbar = this.toolbar;
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams)
toolbar.getLayoutParams();
lp.topMargin = insets.top;
int top = insets.top;
insets.top += toolbar.getHeight();
toolbar.setLayoutParams(lp);
insets.top = top; // revert
}
बिल्कुल V21 के लिए थीम जादू करता है
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- API 21 theme customizations can go here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/accent_material_light</item>
<item name="windowActionModeOverlay">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
और स्क्रीमइनेट्सफ्रेमलेयआउट
अब यह नए डिजाइन सपोर्ट लाइब्रेरी के साथ अधिक आसान है
compile 'com.android.support:design:22.2.0'
क्लोन से @ क्रिस बैन्स https://github.com/chrisbanes/cheesesquare
यहाँ उल्लिखित सभी उत्तर बहुत पुराने और लम्बे हैं। नवीनतम नेविगेशन के साथ काम करने वाला सबसे अच्छा और छोटा समाधान है
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
try {
//int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
// Do something for lollipop and above versions
Window window = getWindow();
// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
// finally change the color to any color with transparency
window.setStatusBarColor(getResources().getColor(R.color.colorPrimaryDarktrans));}
} catch (Exception e) {
Crashlytics.logException(e);
}
}
जब आप दराज खोलते हैं तो यह आपके स्टेटस बार के रंग को पारदर्शी में बदलने वाला है
अब जब आप दराज को बंद करते हैं तो आपको स्थिति बार के रंग को फिर से अंधेरे में बदलने की आवश्यकता होती है। तो आप इसे इस तरह से कर सकते हैं।
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
try {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
// Do something for lollipop and above versions
Window window = getWindow();
// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
// finally change the color again to dark
window.setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark));}
} catch (Exception e) {
Crashlytics.logException(e);
}
}
और फिर मुख्य लेआउट में एक ही लाइन जोड़ें
android:fitsSystemWindows="true"
और आपका ड्रॉअर लेआउट जैसा दिखेगा
<android.support.v4.widget.DrawerLayout
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:id="@+id/drawer_layout"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
और आपका नेविगेशन दृश्य जैसा दिखेगा
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/navigation_header"
app:menu="@menu/drawer"
/>
मैंने इसे और इसके पूरी तरह से काम करने का परीक्षण किया है। यह किसी को मदद करता है। यह सबसे अच्छा तरीका नहीं हो सकता है लेकिन यह आसानी से काम करता है और इसे लागू करने के लिए सरल है। यदि यह मदद करता है तो इसे चिह्नित करें। आसान कोडिंग :)
मैं डिजाइन सपोर्ट लाइब्रेरी का उपयोग कर रहा हूं। और सिर्फ कस्टम थीम का उपयोग करके मैंने ओपन नेविगेशन ड्रॉअर को पारदर्शी स्थिति बार प्राप्त किया।
<style name="NavigationStyle" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/primaryColor</item>
<item name="colorPrimaryDark">@color/primaryColorDark</item>
<!-- To Make Navigation Drawer Fill Status Bar and become Transparent Too -->
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
अंत में मैनिफेस्ट फाइल में थीम जोड़ें
<activity
........
........
android:theme="@style/NavigationStyle">
</activity>
android:fitsSystemWindows="true"
"DrawerLayout" में संपत्ति का उपयोग करना न भूलें
यह सबसे सरल है, और इसने मेरे लिए काम किया:
मान -21 में:
<resources>
<style name="AppTheme" parent="AppTheme.Base">
...
<item name="android:windowTranslucentStatus">true</item>
</style>
<dimen name="topMargin">25dp</dimen>
</resources>
मूल्यों में:
<resources>
<dimen name="topMargin">0dp</dimen>
</resources>
और अपने टूलबार पर सेट करें
android:layout_marginTop="@dimen/topMargin"
24dp
टॉप मार्जिन के लिए इस्तेमाल किया ।
उपयोग करने के बजाय ScrimInsetsFrameLayout
... क्या केवल एक निश्चित ऊँचाई 24dp
और पृष्ठभूमि के साथ एक दृश्य जोड़ना आसान नहीं है primaryColor
?
मैं समझता हूं कि इसमें पदानुक्रम में एक डमी दृश्य जोड़ना शामिल है, लेकिन यह मुझे साफ लगता है।
मैंने पहले से ही इसकी कोशिश की और यह अच्छी तरह से काम कर रहा है।
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_base_drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- THIS IS THE VIEW I'M TALKING ABOUT... -->
<View
android:layout_width="match_parent"
android:layout_height="24dp"
android:background="?attr/colorPrimary" />
<android.support.v7.widget.Toolbar
android:id="@+id/activity_base_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="2dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark" />
<FrameLayout
android:id="@+id/activity_base_content_frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<fragment
android:id="@+id/activity_base_drawer_fragment"
android:name="com.myapp.drawer.ui.DrawerFragment"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:elevation="4dp"
tools:layout="@layout/fragment_drawer" />
</android.support.v4.widget.DrawerLayout>
इसके साथ प्रयास करें:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_layout"
android:fitsSystemWindows="true">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--Main layout and ads-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/ll_main_hero"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>
<FrameLayout
android:id="@+id/ll_ads"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:layout_width="320dp"
android:layout_height="50dp"
android:layout_gravity="center"
android:background="#ff00ff" />
</FrameLayout>
</LinearLayout>
<!--Toolbar-->
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/toolbar"
android:elevation="4dp" />
</FrameLayout>
<!--left-->
<ListView
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@null"
android:background="@mipmap/layer_image"
android:id="@+id/left_drawer"></ListView>
<!--right-->
<FrameLayout
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="@mipmap/layer_image">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/ken2"
android:scaleType="centerCrop" />
</FrameLayout>
अंदाज :
<style name="ts_theme_overlay" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/red_A700</item>
<item name="colorPrimaryDark">@color/red1</item>
<item name="android:windowBackground">@color/blue_A400</item>
</style>
मुख्य गतिविधि ActionBarActivity का विस्तार करती है
toolBar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolBar);
अब आप onCreateOptionsMenu
टूलबार के साथ सामान्य ActionBar पसंद कर सकते हैं।
यह मेरा लेआउट है
आशा है कि आप समझ गए होंगे!