আমি গুগল প্লে স্টোর যেভাবে ব্যবহার করে তার অনুরূপ একটি কাজ তৈরি করতে পরিচালিত করেছি। মূল উত্তরের লিঙ্ক
দয়া করে গিটহাব রেপোটি সন্ধান করুন: এখানে
আপনার নিজস্ব কোডের সাথে খুব মিল তবে সেট শিরোনামের জন্য অনুমতি দিতে এক্সএমএল যুক্ত করেছে:
ব্যবহার অব্যাহত PreferenceActivity
:
settings_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"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
app:navigationContentDescription="@string/abc_action_bar_up_description"
android:background="?attr/colorPrimary"
app:navigationIcon="?attr/homeAsUpIndicator"
app:title="@string/action_settings"
/>
SettingsActivity.java :
public class SettingsActivity extends PreferenceActivity {
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent();
Toolbar bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.settings_toolbar, root, false);
root.addView(bar, 0); // insert at top
bar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
}
Result :
আপডেট (জিনজারব্রেড সামঞ্জস্যতা):
হিসাবে নির্দিষ্ট এখানে , জিনজার ব্রেড ডিভাইস এই লাইনে নালপয়েন্টারএক্সেপশন ফিরে আছেন:
LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent();
ফিক্স:
SettingsActivity.java :
public class SettingsActivity extends PreferenceActivity {
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
Toolbar bar;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
LinearLayout root = (LinearLayout) findViewById(android.R.id.list).getParent().getParent().getParent();
bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.settings_toolbar, root, false);
root.addView(bar, 0); // insert at top
} else {
ViewGroup root = (ViewGroup) findViewById(android.R.id.content);
ListView content = (ListView) root.getChildAt(0);
root.removeAllViews();
bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.settings_toolbar, root, false);
int height;
TypedValue tv = new TypedValue();
if (getTheme().resolveAttribute(R.attr.actionBarSize, tv, true)) {
height = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
}else{
height = bar.getHeight();
}
content.setPadding(0, height, 0, 0);
root.addView(content);
root.addView(bar);
}
bar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
}
উপরের কোন সমস্যা আমাকে জানাবেন!
আপডেট 2: টিঙ্কিং ওয়ার্কারাউন্ড
অনেক দেব নোটগুলিতে যেমন উল্লেখ করা হয়েছে PreferenceActivity
তেমন উপাদানগুলির রঙিনকে সমর্থন করে না তবে কয়েকটি অভ্যন্তরীণ ক্লাস ব্যবহার করে আপনি এটি অর্জন করতে পারেন। এই ক্লাসগুলি অপসারণ না হওয়া অবধি। (অ্যাপকম্প্যাট সমর্থন-v7 v21.0.3 ব্যবহার করে কাজ করে)।
নিম্নলিখিত আমদানি যুক্ত করুন:
import android.support.v7.internal.widget.TintCheckBox;
import android.support.v7.internal.widget.TintCheckedTextView;
import android.support.v7.internal.widget.TintEditText;
import android.support.v7.internal.widget.TintRadioButton;
import android.support.v7.internal.widget.TintSpinner;
তারপরে onCreateView
পদ্ধতিটি ওভাররাইড করুন :
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
// Allow super to try and create a view first
final View result = super.onCreateView(name, context, attrs);
if (result != null) {
return result;
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
// If we're running pre-L, we need to 'inject' our tint aware Views in place of the
// standard framework versions
switch (name) {
case "EditText":
return new TintEditText(this, attrs);
case "Spinner":
return new TintSpinner(this, attrs);
case "CheckBox":
return new TintCheckBox(this, attrs);
case "RadioButton":
return new TintRadioButton(this, attrs);
case "CheckedTextView":
return new TintCheckedTextView(this, attrs);
}
}
return null;
}
Result:
অ্যাপকম্প্যাট 22.1
অ্যাপক্যাম্প্যাট 22.1 নতুন রঙিন উপাদানগুলি প্রবর্তন করেছে যার অর্থ শেষ আপডেটের মতো একই প্রভাব অর্জনের জন্য অভ্যন্তরীণ ক্লাসগুলি ব্যবহার করার দরকার নেই। পরিবর্তে এটি অনুসরণ করুন (এখনও ওভাররাইডিং onCreateView
):
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
// Allow super to try and create a view first
final View result = super.onCreateView(name, context, attrs);
if (result != null) {
return result;
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
// If we're running pre-L, we need to 'inject' our tint aware Views in place of the
// standard framework versions
switch (name) {
case "EditText":
return new AppCompatEditText(this, attrs);
case "Spinner":
return new AppCompatSpinner(this, attrs);
case "CheckBox":
return new AppCompatCheckBox(this, attrs);
case "RadioButton":
return new AppCompatRadioButton(this, attrs);
case "CheckedTextView":
return new AppCompatCheckedTextView(this, attrs);
}
}
return null;
}
প্রয়োজনীয় পছন্দসই স্ক্রিনগুলি
অনেক লোক নেস্টেড এরগুলিতে টুলবারটি অন্তর্ভুক্ত করে সমস্যাগুলি ভোগ করছে <PreferenceScreen />
তবে আমি একটি সমাধান পেয়েছি !! - অনেক পরীক্ষার পরেও ত্রুটি!
আপনার সাথে নিম্নলিখিতগুলি যুক্ত করুন SettingsActivity
:
@SuppressWarnings("deprecation")
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
super.onPreferenceTreeClick(preferenceScreen, preference);
// If the user has clicked on a preference screen, set up the screen
if (preference instanceof PreferenceScreen) {
setUpNestedScreen((PreferenceScreen) preference);
}
return false;
}
public void setUpNestedScreen(PreferenceScreen preferenceScreen) {
final Dialog dialog = preferenceScreen.getDialog();
Toolbar bar;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
LinearLayout root = (LinearLayout) dialog.findViewById(android.R.id.list).getParent();
bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.settings_toolbar, root, false);
root.addView(bar, 0); // insert at top
} else {
ViewGroup root = (ViewGroup) dialog.findViewById(android.R.id.content);
ListView content = (ListView) root.getChildAt(0);
root.removeAllViews();
bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.settings_toolbar, root, false);
int height;
TypedValue tv = new TypedValue();
if (getTheme().resolveAttribute(R.attr.actionBarSize, tv, true)) {
height = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
}else{
height = bar.getHeight();
}
content.setPadding(0, height, 0, 0);
root.addView(content);
root.addView(bar);
}
bar.setTitle(preferenceScreen.getTitle());
bar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
}
এ PreferenceScreen
জাতীয় ব্যথা হওয়ার কারণ হ'ল এগুলি একটি মোড়কের ডায়ালগ হিসাবে ভিত্তি করে রয়েছে, সুতরাং আমাদের এটির সাথে ডায়ালগ লেআউট ক্যাপচার করতে হবে।
সরঞ্জামদণ্ডের ছায়া
ডিজাইনটি আমদানি করে Toolbar
প্রি-ভি 21 ডিভাইসগুলিতে উচ্চতা এবং ছায়া গোছানোর অনুমতি দেয় না, তাই আপনি যদি নিজের উপর উচ্চতা রাখতে চান তবে আপনাকে Toolbar
এটিতে একটি মোড়ানো দরকার AppBarLayout
:
`সেটিংস_টলবার.এক্সএমএল:
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
.../>
</android.support.design.widget.AppBarLayout>
build.gradle
ফাইলে নির্ভরতা হিসাবে ডিজাইন সমর্থন লাইব্রেরি যুক্ত করতে ভুলবেন না :
compile 'com.android.support:support-v4:22.2.0'
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:design:22.2.0'
অ্যান্ড্রয়েড 6.0
আমি উল্লিখিত ওভারল্যাপিং ইস্যুটি তদন্ত করেছি এবং আমি সমস্যাটি পুনরুত্পাদন করতে পারি না।
উপরোক্ত হিসাবে ব্যবহারের পূর্ণ কোড নিম্নলিখিতটি উত্পাদন করে:
যদি আমি কিছু মিস করছি তবে দয়া করে আমাকে এই রেপোর মাধ্যমে জানান এবং আমি তদন্ত করব।