क्या किसी को पता है कि एक्शनबार के होम आइकन और शीर्षक के बीच पैडिंग कैसे सेट करें?
क्या किसी को पता है कि एक्शनबार के होम आइकन और शीर्षक के बीच पैडिंग कैसे सेट करें?
जवाबों:
मैंने क्लिफस उत्तर को अनुकूलित किया और अपनी एक्शनबार शैली परिभाषा में लोगो-ड्रॉबल को असाइन किया, उदाहरण के लिए इस तरह से रेस / स्टाइल में। xx:
<item name="android:actionBarStyle">@style/MyActionBar</item>
<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#3f51b5</item>
<item name="android:titleTextStyle">@style/ActionBar.TitleText</item>
<item name="android:textColor">#fff</item>
<item name="android:textSize">18sp</item>
<item name="android:logo">@drawable/actionbar_space_between_icon_and_title</item>
</style>
ड्रा करने योग्य क्लिफ़स वन (यहाँ डिफ़ॉल्ट ऐप लॉन्चर आइकन के साथ) Res / drawable / actionbar_space_between_icon_and_title.xml में दिखता है:
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/ic_launcher"
android:right="20dp"/>
</layer-list>
Android_manifest.xml में आप अभी भी एक अलग ऐप आइकन (लॉन्चर 'लॉन्चर' डेस्कटॉप 'पर सेट कर सकते हैं। यहां कोई भी अलग लोगो परिभाषा एक्शन बार के बिना गतिविधियों में दिखाई देती है।
संपादित करें : सुनिश्चित करें कि आपने इस ड्रॉ को लोगो के रूप में सेट किया है , न कि आपके ऐप आइकन जैसा कि कुछ टिप्पणीकारों ने किया।
बस एक एक्सएमएल को बनाने योग्य बनाएं और इसे संसाधन फ़ोल्डर में डालें "ड्रॉबल" (बिना किसी घनत्व या अन्य कॉन्फ़िगरेशन के)।
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/my_logo"
android:right="10dp"/>
</layer-list>
अंतिम कदम यह है कि अपने प्रदर्शन में (या एक्शनबार ऑब्जेक्ट पर आपकी गतिविधि में) लोगो के रूप में इस नए योग्य को सेट किया जाए।
सौभाग्य!
मुझे भी इसी तरह के मुद्दे का सामना करना पड़ा, मेरे मामले में मुझे सामग्री के आधार पर प्रत्येक गतिविधि पर गतिशील रूप से शीर्षक सेट करना पड़ा।
तो यह मेरे लिए काम किया।
actionBar.setTitle(" " + yourActivityTitle);
यदि आप सभी चाहते हैं कि रिक्ति है, तो यह सबसे आसान समाधान है जिसके बारे में मैं सोच सकता था।
app:titleMarginStart
एक्सएमएल में विशेषता का उपयोग करने के लिए एक क्लीनर समाधान होगा ।
इस तरह से मैं होम आइकन और शीर्षक के बीच पैडिंग सेट करने में सक्षम था।
ImageView view = (ImageView)findViewById(android.R.id.home);
view.setPadding(left, top, right, bottom);
हालाँकि, मुझे ActionBar xml शैलियों के माध्यम से इसे अनुकूलित करने का कोई तरीका नहीं मिला। अर्थात्, निम्न XML काम नहीं करता है:
<style name="ActionBar" parent="android:style/Widget.Holo.Light.ActionBar">
<item name="android:titleTextStyle">@style/ActionBarTitle</item>
<item name="android:icon">@drawable/ic_action_home</item>
</style>
<style name="ActionBarTitle" parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textSize">18sp</item>
<item name="android:paddingLeft">12dp</item> <!-- Can't get this padding to work :( -->
</style>
हालाँकि, यदि आप इसे xml के माध्यम से प्राप्त करना चाह रहे हैं, तो ये दोनों लिंक आपको समाधान खोजने में मदद कर सकते हैं:
https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml
(यह एक ऐक्शन बार में होम आइकन प्रदर्शित करने के लिए उपयोग किया जाने वाला वास्तविक लेआउट है) https://github.com/android/platform_frameworks_base/blob/master/core/res/res/res/layout/action_bar_home.xml
padding
, यह marginEnd
एपी 17 के बाद से उपयोग करना प्रतीत होता है - जो शायद इस समाधान को तोड़ देगा। नीचे मेरा देखें
यह सामग्री डिजाइन में एक सामान्य प्रश्न है क्योंकि आप नीचे दिए गए टुकड़े में सामग्री के साथ अपने टूलबार शीर्षक को पंक्तिबद्ध करना चाहते हैं। ऐसा करने के लिए, आप अपने टूलबार. xml लेआउट में विशेषता सामग्री InsetStart = "72dp" का उपयोग करके "12dp" की डिफ़ॉल्ट पैडिंग को ओवरराइड कर सकते हैं जैसा कि नीचे दिखाया गया है।
toolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/app_theme_color"
app:contentInsetStart="72dp"/>
फिर अपनी गतिविधि में, कॉल करें
Toolbar toolbar = (Toolbar) activity.findViewById(R.id.toolbar);
toolbar.setTitle("Title Goes Here");
और आप इसे समाप्त करते हैं:
app:titleMarginStart="dimension"
सीधे शीर्षक पर निशाना लगाना भी है।
contentInsetStart
होम आइकन और शीर्षक के बीच में जगह है, तो उत्तर कम से कम ऐसा कह सकता है। मेरा परीक्षण अभी लोगो के सामनेcontentInsetStart
स्थान रखने के लिए लग रहा था (जो माना जाता है कि होम आइकन के समान नहीं है)।
मेरे लिए केवल निम्नलिखित संयोजन ने काम किया, एपीआई 18 से 24 तक परीक्षण किया गया
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
जहां "ऐप" है: xmlns:app="http://schemas.android.com/apk/res-auto"
उदाहरण के लिए।
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/SE_Life_Green"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
>
.......
.......
.......
</android.support.v7.widget.Toolbar>
यदि आप AppCompat (android.support.v7.widget.Toolbar,> = संशोधन 24, जून 2016) से टूलबार का उपयोग कर रहे हैं, तो आइकन और शीर्षक के बीच पैडिंग निम्नलिखित मान के साथ बदला जा सकता है:
app:contentInsetStartWithNavigation="0dp"
मेरे उत्तर को बेहतर बनाने के लिए, आप इसे सीधे अपनी गतिविधि के अंदर अपने टूलबार पर उपयोग कर सकते हैं या आप अपने टूलबार के लिए एक नई लेआउट फ़ाइल बना सकते हैं। इस स्थिति में, आपको बस अपने टूलबार के @id को प्रत्येक आवश्यक दृश्य पर शामिल संपत्ति का उपयोग करके आयात करना होगा।
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:elevation="4dp"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp">
</android.support.v7.widget.Toolbar>
फिर आप अपनी गतिविधि पर अपना लेआउट आयात कर सकते हैं। Xml
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
titleMarginStart
मेरे लिए काम का उपयोग करना । Xamarin उदाहरण:
<android.support.v7.widget.Toolbar
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:titleMarginStart="24dp"/>
लोगो को इस तरह सेट करें:
mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar);
SetSupportActionBar(mToolbar);
SupportActionBar.SetLogo(Resource.Drawable.titleicon32x32);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayUseLogoEnabled(true);
SupportActionBar.Title = "App title";
मेरे शीर्षक लोगो के दाईं ओर डिफ़ॉल्ट शीर्षक पाठ के बजाय एक कस्टम छवि का उपयोग कर Im। यह प्रोग्राम की तरह सेट किया गया है
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setCustomView(R.layout.include_ab_txt_logo);
actionBar.setDisplayShowCustomEnabled(true);
मेरे लिए उपरोक्त उत्तरों के साथ मुद्दे @ क्लिफ़स का सुझाव मेरे लिए काम नहीं करता है क्योंकि उन मुद्दों के कारण जो दूसरों ने टिप्पणियों में उल्लिखित किए हैं और जबकि @dushyanth प्रोग्रामेटिक पैडिंग सेटिंग ने अतीत में काम किया हो सकता है, मुझे लगता है कि यह तथ्य है कि रिक्ति है अब android:layout_marginEnd="8dip"
API 17 का उपयोग करके सेट करें मैन्युअल रूप से पैडिंग सेट करने का कोई प्रभाव नहीं होना चाहिए। अपनी वर्तमान स्थिति को सत्यापित करने के लिए उसने जो लिंक पोस्ट किया है, उसे देखें।
मेरे लिए एक सरल समाधान एक्शनबार में मेरे कस्टम दृश्य पर एक नकारात्मक मार्जिन सेट करना है, जैसे android:layout_marginLeft="-14dp"
। एक त्वरित परीक्षण यह दर्शाता है कि यह मेरे लिए 2.3.3 और 4.3 का उपयोग कर काम करता हैActionBarCompat
आशा है कि यह किसी की मदद करता है!
मैंने कस्टम नेविगेशन लेआउट का उपयोग करके इस समस्या को हल किया
इसका उपयोग करके आप एक्शन बार में शीर्षक में कुछ भी अनुकूलित कर सकते हैं:
build.gradle
dependencies {
compile 'com.android.support:appcompat-v7:21.0.+'
...
}
AndroidManifest.xml
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activity
android:name=".MainActivity"
android:theme="@style/ThemeName">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
styles.xml
<style name="ThemeName" parent="Theme.AppCompat.Light">
<item name="actionBarStyle">@style/ActionBar</item>
<item name="android:actionBarStyle" tools:ignore="NewApi">@style/ActionBar</item>
<style name="ActionBar" parent="Widget.AppCompat.ActionBar">
<item name="displayOptions">showCustom</item>
<item name="android:displayOptions" tools:ignore="NewApi">showCustom</item>
<item name="customNavigationLayout">@layout/action_bar</item>
<item name="android:customNavigationLayout" tools:ignore="NewApi">@layout/action_bar</item>
<item name="background">@color/android:white</item>
<item name="android:background">@color/android:white</item>
action_bar.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/action_bar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:drawableLeft="@drawable/ic_launcher"
android:drawablePadding="10dp"
android:textSize="20sp"
android:textColor="@android:color/black"
android:text="@string/app_name"/>
मेरे पास एक समान मुद्दा था लेकिन एक्शन बार में अप और कस्टम ऐप आइकन / लोगो के बीच अंतर के साथ। प्रोग्रामिंग के लिए दुष्यंत के समाधान ने मेरे लिए काम किया (ऐप / लोगो आइकन पर पैडिंग सेट करना)। मैंने या तो android.R.id.home या R.id.abs__home ( ActionBarSherlock को खोजने की कोशिश की , क्योंकि यह बैकवर्ड कम्पैटिबिलिटी सुनिश्चित करता है), और यह 2.3-4.3 डिवाइसों पर काम कर रहा है जिन्हें मैंने टेस्ट किया है।
मेरे मामले के लिए, यह टूलबार के साथ था, मैंने इसे इस तरह हल किया:
ic_toolbar_drawble.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/ic_toolbar"
android:right="-16dp"
android:left="-16dp"/>
</layer-list>
मेरे टुकड़े में, मैं एपीआई की जाँच करें:
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
toolbar.setLogo(R.drawable.ic_toolbar);
else
toolbar.setLogo(R.drawable.ic_toolbar_draweble);
सौभाग्य!
आप इस तरह से अपने दराज के ड्रॉबल को बदल सकते हैं:
<style name="MyTheme" parent="android:Theme.WithActionBar">
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>
<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="barLength">24dp</item>
<item name="arrowShaftLength">24dp</item>
<item name="arrowHeadLength">10dp</item>
<item name="drawableSize">42dp</item> //this is your answer
</style>
यह सही उत्तर नहीं है, क्योंकि जब आप drawableSize (drawableSize = width = height) में बदलाव करते हैं, तो आप साइडिंग और ड्राअरअरो आइकन स्केलिंग नहीं चुन सकते। लेकिन आप बाएं से मार्जिन कर सकते हैं। सही से हाशिये पर
findViewById(android.R.id.home).setPadding(10, 0, 5, 0);
जब आप एक कस्टम टूलबार का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(R.string.activity_title);
setSupportActionBar(toolbar);
getSupportActionBar().setLogo(R.drawable.logo);
और अपने टूलबार लेआउट में बस सेट करें app:titleMarginStart="16dp"
ध्यान दें कि आपको आइकन को लोगो के रूप में सेट करना है, getSupportActionBar().setIcon(R.drawable.logo)
इसके बजाय उपयोग न करें:
getSupportActionBar().setLogo(R.drawable.logo)
मैंने इस्तेमाल किया AppBarLayout
और कस्टम ने ImageButton
ऐसा किया।
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp"
android:background="@android:color/transparent"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="32dp"
android:layout_height="32dp"
android:src="@drawable/selector_back_button"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"
android:id="@+id/back_button"/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
</RelativeLayout>
</android.support.design.widget.AppBarLayout>
मेरा जावा कोड:
findViewById(R.id.appbar).bringToFront();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
getSupportActionBar().setDisplayShowTitleEnabled(false);
आप विधि द्वारा भी इसे प्राप्त कर सकते हैं:
Drawable d = new InsetDrawable(getDrawable(R.drawable.nav_icon),0,0,10,0);
mToolbar.setLogo(d);
अपने XML में, app:titleMargin
अपने टूलबार दृश्य को निम्नानुसार सेट करें :
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:titleMarginStart="16dp"/>
या आपके कोड में:
toolbar.setTitleMargin(16,16,16,16); // start, top, end, bottom
यह मेरे लिए शीर्षक में पैडिंग जोड़ने के लिए काम करता है और ActionBar
आइकन के लिए मैंने प्रोग्रामेटिक रूप से सेट किया है।
getActionBar().setTitle(Html.fromHtml("<font color='#fffff'> Boat App </font>"));
<string name="app_name">" "Brick Industry</string>
बस " "
अपने ऐप के नाम के लिए जोड़ें यह आइकन और शीर्षक के बीच स्थान जोड़ देगा