থিম.এপকম্প্যাট.লাইট.ডার্ক অ্যাকশনবারের মতো আমি অ্যাপকম্প্যাট-ভি 7 সরঞ্জামদণ্ডকে কীভাবে স্টাইল করব?


105

আমি Theme.AppCompat.Light.DarkActionBarনতুন সমর্থন লাইব্রেরি টুলবার দিয়ে চেহারাটি পুনরায় তৈরি করার চেষ্টা করছি ।

আমি যদি পছন্দ Theme.AppCompat.Lightকরি তবে আমার সরঞ্জামদণ্ড হালকা হবে এবং আমি যদি Theme.AppCompatএটি চয়ন করি তবে এটি অন্ধকার হবে। (প্রযুক্তিগতভাবে আপনাকে .NoActionBarসংস্করণটি ব্যবহার করতে হবে তবে আমি কেবলমাত্র পার্থক্যটিই বলতে পারি

<style name="Theme.AppCompat.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
</style>

এখন আর কিছুই নেই Theme.AppCompat.Light.DarkActionBarনির্লজ্জভাবে আমি ভেবেছিলাম এটি কেবল নিজের তৈরি করার পক্ষে যথেষ্ট ভাল

<style name="Theme.AppCompat.Light.DarkActionBar.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
</style>

তবে এটির সাথে আমার সরঞ্জামদণ্ডগুলি এখনও Lightথিমযুক্ত। আমি এখন ডার্ক (বেস) থিম এবং হালকা থিম মিশ্রনের বিভিন্ন সংমিশ্রণে চেষ্টা করে ঘন্টাগুলি ব্যয় করেছি তবে আমি কেবল এমন একটি সংমিশ্রণ খুঁজে পাচ্ছি না যা সরঞ্জামদণ্ডগুলি ছাড়াও আমার হালকা ব্যাকগ্রাউন্ড রাখবে।

AppCompat.Light.DarkActionBarআমদানির সাথে চেহারা পাওয়ার কোনও উপায় আছে কি android.support.v7.widget.Toolbar?

উত্তর:


216

ক্লোনটির জন্য সরঞ্জামদণ্ডটি স্টাইল করার প্রস্তাবিত উপায় Light.DarkActionBarহ'ল Theme.AppCompat.Light.DarkActionbarপিতামাত / অ্যাপ্লিকেশন থিম হিসাবে ব্যবহার করা এবং ডিফল্ট অ্যাকশনবারটি লুকানোর জন্য শৈলীতে নিম্নলিখিত বৈশিষ্ট্যগুলি যুক্ত করা:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

তারপরে নিম্নলিখিতটি আপনার সরঞ্জামদণ্ড হিসাবে ব্যবহার করুন:

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.AppBarLayout>

আরও পরিবর্তন জন্য, আপনি শৈলী ব্যাপ্ত তৈরি করবে ThemeOverlay.AppCompat.Dark.ActionBarএবং ThemeOverlay.AppCompat.Lightমধ্যে বেশী প্রতিস্থাপন AppBarLayout->android:themeএবং Toolbar->app:popupTheme। এছাড়াও মনে রাখবেন যে ?attr/colorPrimaryআপনি এটি আপনার মূল শৈলীতে সেট করে থাকলে এটি আপনার চয়ন করবে যাতে আপনি কোনও ভিন্ন পটভূমির রঙ পেতে পারেন।

আপনি এর একটি ভাল উদাহরণ পাবেন বর্তমান প্রজেক্টের টেমপ্লেটে একটি Empty Activityঅ্যান্ড্রয়েড স্টুডিওর (1.4+) সাথে।


1
আচ্ছা হ্যাঁ আপনি পারেন। "আপনি যদি নিজের দ্বারা সংজ্ঞায়িত শৈলীগুলির মধ্যে উত্তরাধিকারী হতে চান তবে আপনাকে প্যারেন্ট অ্যাট্রিবিউটটি ব্যবহার করতে হবে না just পরিবর্তে, আপনার নতুন স্টাইলের নামটি আপনি যে স্টাইলটি উত্তীর্ণ করতে চান তার নামটি উপস্থাপন করুন, একটি সময়কালে পৃথক করে । " বিকাশকারী.অ্যান্ড্রয়েড.
com

1
এছাড়াও আপনার পোস্ট করা এক্সএমএল ব্যবহার করে আমি সাদা টেক্সট সহ একটি সাদা টুলবার পাই বা আমি থিমটি পরিবর্তন করলে আমি ThemeOverlay.AppCompat.ActionBarকালো টেক্সট সহ সাদা টুলবার পাই যাতে এটি খুব ভালভাবে কাজ করে না বলে মনে হয়। মনে হয় না যে সিস্টেমটি <item name="android:colorBackground">@color/background_material_dark</item>ইন সম্পর্কে যত্ন করে Base.ThemeOverlay.AppCompat.Dark। তবে আমি খনন চালিয়ে যাব। (এবং আমি পৃষ্ঠাটি পড়েছি That এটি আমার প্রথম পয়েন্টগুলির মধ্যে একটি ছিল Still এখনও কাজ করে বলে মনে হচ্ছে না))
লিমিনাল

1
এর জন্যে দুঃখিত. সরলতার জন্য সরঞ্জামদণ্ডের পটভূমি রঙ ছেড়ে গেছে এবং ফলাফলগুলি পরীক্ষা করে নি n't আমি সেই অনুযায়ী উত্তরটি সংশোধন করেছি। যদিও কেবল স্টাইল ব্যবহার করে এটি করার কোনও উপায় আমি পাইনি। যেহেতু আমার অ্যাপ্লিকেশনটির বিভিন্ন রঙের স্কিম রয়েছে তাই আমি android:background="?attr/colorPrimary"সরঞ্জামদণ্ডে এবং <item name="colorPrimary">@color/background_material_dark</item>আমার স্টাইলে ব্যবহার করি যাতে এটি স্বয়ংক্রিয়ভাবে প্রাথমিক অ্যাপ্লিকেশনের রঙটি গ্রহণ করে।
ওআরআরএস

1
এটি অ্যাপের তুলনায় 23 এ আর কাজ করছে না এবং শিরোনামটি কালো এবং সাদা নয়: /
রাশাদ.জেড

21
থিম এবং শৈলীর এই জঙ্গলে আঁকড়ে ধরার কোনও উপায় আছে কি?
axd

72

সম্পাদনা করুন: অ্যাপকম্প্যাট-ভি 7: 22.1.1 এ আপডেট করার পরে এবং আমার স্টাইলের AppCompatActivityপরিবর্তে ব্যবহার করে। ActionBarActivityএক্সএমএল দেখে মনে হচ্ছে:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

দ্রষ্টব্য: এর অর্থ আমি Toolbarফ্রেমওয়ার্ক দ্বারা সরবরাহিত একটি ব্যবহার করছি (কোনও এক্সএমএল ফাইলের অন্তর্ভুক্ত নয়)।

এটি আমার জন্য কাজ করেছে:
styles.xML ফাইল:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

আপডেট: গ্যাব্রিয়েল মারিয়োটির ব্লগের একটি উদ্ধৃতি ।

নতুন সরঞ্জামদণ্ডের সাহায্যে আপনি একটি স্টাইল এবং একটি থিম প্রয়োগ করতে পারেন। তারা ভিন্ন ধরনের! শৈলীটি সরঞ্জামদণ্ড দর্শনে স্থানীয়, উদাহরণস্বরূপ পটভূমির রঙ color অ্যাপ্লিকেশন: থিমটি এর পরিবর্তে টুলবারে সজ্জিত সমস্ত ইউআই উপাদানগুলির জন্য বৈশ্বিক, উদাহরণস্বরূপ শিরোনাম এবং আইকনগুলির রঙ।


"ত্রুটি: প্রদত্ত নামের সাথে মিলছে এমন কোনও সংস্থান পাওয়া যায় নি: অ্যাটর 'কালারপ্রাইমারি'" আমরা এখানে appcompat_v7 ব্যবহার করার বিষয়ে কথা বলছি।
ইয়ার

আমার জন্য, এটি কেবল ললিপপ ডিভাইসে কাজ করে। প্রাক-ললিপপটিতে কেবল অ্যাকশন বারই নয়, সমস্ত ক্রিয়াকলাপ অন্ধকার থিম ব্যবহার করে যা আমি যা চাইছিলাম তা নয়। আমি উজ্জীবিত হয়েছি, কিন্তু শেষে আমি একক সরঞ্জামদণ্ডের ভিউ স্টাইল করে ওআরআর উত্তরগুলি ব্যবহার করেছি।
lorenzo-s

@ লোরেঞ্জো-এস আমি অ্যাপকম্প্যাটটির সর্বশেষ সংস্করণটির জন্য আমার উত্তর আপডেট করেছি। আমি এটিকে অ্যান্ড্রয়েড 4.3 এর সাথে গ্যালাক্সি নেক্সাসেও পরীক্ষা করে দেখেছি এবং এটি কাজ করছে
লর্ডরেডেনএমকে

31

এই সমস্যাটিতে অনেক সময় ডুবে যাওয়ার পরে ঠিক আছে, আমি যে প্রত্যাশার প্রত্যাশায় ছিলাম তা পেতেই আমি এইভাবে পরিচালনা করি। আমি এটিকে পৃথক উত্তর দিচ্ছি যাতে আমি সমস্ত জায়গায় এক জায়গায় পেতে পারি।

এটি ফ্যাক্টরের সংমিশ্রণ।

প্রথমত, কেবল থিমগুলির মাধ্যমে সরঞ্জামদণ্ডগুলিকে সুন্দর করে তোলার চেষ্টা করবেন না। এটা অসম্ভব বলে মনে হচ্ছে।

সুতরাং ওআরআর উত্তরের মতো আপনার সরঞ্জামদণ্ডগুলিতে স্পষ্টত থিম প্রয়োগ করুন

বিন্যাস / 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:layout_alignParentTop="true"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:theme="@style/Dark.Overlay"
    app:popupTheme="@style/Dark.Overlay.LightPopup" />

তবে এটি ম্যাজিক সস। ব্যাকগ্রাউন্ডের রঙগুলি পেতে আসলে আমি আপনাকে আশ্বাস দিয়েছিলাম যে backgroundআপনার সরঞ্জামদণ্ডের থিমগুলিতে বৈশিষ্ট্যটি ওভাররাইড করতে হবে

মান / styles.xml:

<!-- 
    I expected android:colorBackground to be what I was looking for but
    it seems you have to override android:background
-->
<style name="Dark.Overlay" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:background">?attr/colorPrimary</item>
</style>

<style name="Dark.Overlay.LightPopup" parent="ThemeOverlay.AppCompat.Light">
    <item name="android:background">@color/material_grey_200</item>
</style>

তারপরে আপনার সরঞ্জামদণ্ডের বিন্যাসটি আপনার অন্যান্য বিন্যাসে অন্তর্ভুক্ত করুন

<include android:id="@+id/mytoolbar" layout="@layout/toolbar" />

এবং আপনি যেতে ভাল।

আশা করি এটি অন্য কাউকে সহায়তা করবে যাতে আমার যতটুকু সময় কাটানো হয় তার জন্য আপনাকে এতো বেশি সময় ব্যয় করতে হবে না।

(যদি কেউ কীভাবে এই থিমগুলি ব্যবহার করে কীভাবে এই কাজটি করতে পারেন তা বুঝতে পারেন, যেমন বিন্যাসের ফাইলগুলিতে থিমগুলি স্পষ্টভাবে প্রয়োগ না করে আমি তার উত্তরটির সাথে খুশী সমর্থন করব)

সম্পাদনা করুন:

সুতরাং আপাতদৃষ্টিতে আরও একটি সম্পূর্ণ উত্তর পোস্ট করা একটি ডাউনভোট চুম্বক ছিল তাই আমি কেবল উপরের অসম্পূর্ণ উত্তরটি গ্রহণ করব তবে কারও পক্ষে যদি সত্যিই এটির প্রয়োজন হয় তবে এই উত্তরটি এখানে রেখে দিন। যদিও এটি আপনাকে সুখী করে তুলতে নিখরচায় মনে রাখবেন।


2
আমার অ্যাপ থিমে আমি ঠিক <item name="colorPrimary">@color/colorPrimary</item> তখনই রেখেছি আমি android:background="?attr/colorPrimary"আমার সরঞ্জামদণ্ডের উইজেটে অ্যাট্রিবিউট ব্যবহার করতে মুক্ত ।
লেমুয়েল

আমি কীভাবে জানতে পারি আপনি কীভাবে "@ color / উপাদান_grey_200" এর সংজ্ঞা পাবেন?
চেওক ইয়ান চেং

আমি ঠিক কোথায় জানি না তবে কেউ google.com/design/spec/style/color.html#color-color-palet এর উপর ভিত্তি করে একটি color.xML ফাইল তৈরি করেছে তবে এটি এখন সন্ধান করতে পারে না
লিমিনাল

1
@ লিমিনাল আপনি যদি @android:color/transparentমেনু আইটেমটিতে দীর্ঘ সময় টিপুন / ক্লিক করেন তবে সমস্যাটি এড়াতে পারবেন যদি পাঠ্যের চারপাশে একটি বাক্স থাকে। যদি ভবিষ্যতে হালকা ব্যাকগ্রাউন্ডের রঙ পরিবর্তন হয় এটি এটি ভবিষ্যতেরও প্রমাণ দেয়।
রায়ান আর

আপনি কল্পসিংটুলবারলআউট যদিও ব্যবহার করেন তখন কাজ করে না।
arekolek

17

এটি করার সবচেয়ে পরিষ্কার উপায়টি হ'ল ' থিমওভারলে.অ্যাপকম্প্যাট.ডार्ক.অ্যাকশনবার ' এর একটি শিশু তৈরি করুন । উদাহরণস্বরূপ, আমি টুলবারের পটভূমির রঙটি রেড এবং পাঠ্যের রঙকে নীলতে সেট করেছি।

<style name="MyToolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:background">#FF0000</item>
    <item name="android:textColorPrimary">#0000FF</item>
</style>

তারপরে আপনি আপনার থিমটি সরঞ্জামদণ্ডে প্রয়োগ করতে পারেন:

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    app:theme="@style/MyToolbar"
    android:minHeight="?attr/actionBarSize"/>

6
আমার godশ্বর এটি ছিল! textColorPrimary! কেন এত যে কোন জায়গায় খুঁজে পাওয়া কঠিন নিতান্তই ছিল
Muppet

12

সরঞ্জাম দণ্ড শৈলীটি কাস্টমাইজ করতে, প্রথমে উইজেট.অ্যাপকম্প্যাট.টুলবারকে উত্তরাধিকার সূত্রে সরঞ্জাম বার কাস্টম স্টাইল তৈরি করুন, বৈশিষ্ট্যগুলিকে ওভাররাইড করুন এবং তারপরে নীচে দেখানো হিসাবে এটি কাস্টম অ্যাপ্লিকেশন থিমটিতে যুক্ত করুন, এর জন্য http://www.zoftino.com/android-toolbar- টিউটোরিয়াল দেখুন আরও তথ্য সরঞ্জাম বার এবং শৈলী।

   <style name="MyAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="toolbarStyle">@style/MyToolBarStyle</item>
    </style>
    <style name="MyToolBarStyle" parent="Widget.AppCompat.Toolbar">
        <item name="android:background">#80deea</item>
        <item name="titleTextAppearance">@style/MyTitleTextAppearance</item>
        <item name="subtitleTextAppearance">@style/MySubTitleTextAppearance</item>
    </style>
    <style name="MyTitleTextAppearance" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
        <item name="android:textSize">35dp</item>
        <item name="android:textColor">#ff3d00</item>
    </style>
    <style name="MySubTitleTextAppearance" parent="TextAppearance.Widget.AppCompat.Toolbar.Subtitle">
        <item name="android:textSize">30dp</item>
        <item name="android:textColor">#1976d2</item>
    </style>

7

Yout নীচে এটি চেষ্টা করতে পারেন।

<style name="MyToolbar" parent="Widget.AppCompat.Toolbar">
    <!-- your code here -->
</style>

এবং বিস্তারিত উপাদানগুলি আপনি https://developer.android.com/references/android/support/v7/appcompat/R.styleable.html# টুলবারে এগুলি দেখতে পাচ্ছেন

এখানে আরো কিছু আছে: TextAppearance.Widget.AppCompat.Toolbar.Title, TextAppearance.Widget.AppCompat.Toolbar.Subtitle, Widget.AppCompat.Toolbar.Button.Navigation

আশা করি এটি আপনাকে সহায়তা করতে পারে।


1
হা. তাদের সাথে আমি পটভূমির রঙটি সঠিকভাবে পেতে পারা যায় এবং শেষ পর্যন্ত কীভাবে শিরোনাম-রঙগুলি পেতে হয় তা আমি নির্ধারণ করি। তবে এই মুহুর্তে হত্যাকারী জিনিসটি হ'ল ওভারফ্লো বোতামটি কোথায় রঙ পেয়েছে তা আমি বুঝতে পারি না। আমি যা পরিবর্তন করি তা এতো অন্ধকার থাকে না কেন এটি আমার অন্ধকার অ্যাকশনবারের বিরুদ্ধে প্রদর্শিত হয় না। যদি আমি থিমটি অন্ধকারে পরিবর্তন করি তবে এটি হালকা এবং ভালভাবে প্রদর্শিত হবে ow যাইহোক আমি যখন প্রায় হালকা থিম দিয়ে শুরু করেছি তখন কীভাবে ওভারফ্লো আইকনটি হালকা প্রদর্শিত হবে তা আমি বুঝতে পারি না
লিমিনাল

0

অরনাভ রাওর মতো, তবে ভিন্ন পিতামাতার সাথে:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="toolbarStyle">@style/MyToolbar</item>
</style>

<style name="MyToolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:background">#ff0000</item>
</style>

এই পদ্ধতির সাহায্যে, সরঞ্জামদণ্ডের উপস্থিতি অ্যাপ্লিকেশন শৈলীতে সম্পূর্ণরূপে সংজ্ঞায়িত করা হয়, সুতরাং আপনাকে প্রতিটি সরঞ্জামদণ্ডে কোনও স্টাইলিং রাখার দরকার নেই।


2
প্রকৃতপক্ষে android:toolbarStyleএআইপি 21+ এর জন্য android.widget.ToolbartoolbarStyleAppCompat এর জন্য android.support.v7.widget.Toolbar
ইউজেন পেচানেক

আমি ভেবেছিলাম অ্যান্ড্রয়েড স্টুডিও আমাকে এটি দিয়ে একটি সমস্যা দিচ্ছে, তবে দ্বিতীয় পরীক্ষায় আপনি ঠিক বলেছেন! এটি দুর্দান্ত খবর - আমি আমার মিনিএসডিকে আবার 19-এ নামিয়ে দিতে সক্ষম হয়েছি এবং দেখে মনে হচ্ছে আমার সরঞ্জামদণ্ড স্টাইল এখনও ঠিকঠাক কাজ করছে! ধন্যবাদ!
ক্রেগমজ

এই মাত্র লক্ষ্য করা হল! এখনও এর ভুল বোঝাবুঝি এর শৈলী বনাম থিমMyToolbarশৈলীতে Widget.AppCompat.Toolbarথিম না বাড়ানো উচিত ।
ইউজেন পেচানেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.