Last active
May 22, 2019 17:19
-
-
Save gldraphael/7ecd60525313275b56f9 to your computer and use it in GitHub Desktop.
Abstract base class for the SettingsActivtiy which implements and proxies the necessary calls to be used with AppCompat, and the Settings Activity that inflates a toolbar at runtime.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.activities; | |
import android.content.res.Configuration; | |
import android.os.Bundle; | |
import android.preference.PreferenceActivity; | |
import android.support.annotation.LayoutRes; | |
import android.support.annotation.Nullable; | |
import android.support.v7.app.ActionBar; | |
import android.support.v7.app.AppCompatDelegate; | |
import android.support.v7.widget.Toolbar; | |
import android.view.MenuInflater; | |
import android.view.View; | |
import android.view.ViewGroup; | |
/** | |
* A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls | |
* to be used with AppCompat. | |
*/ | |
public abstract class AppCompatPreferenceActivity extends PreferenceActivity { | |
private AppCompatDelegate mDelegate; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
getDelegate().installViewFactory(); | |
getDelegate().onCreate(savedInstanceState); | |
super.onCreate(savedInstanceState); | |
} | |
@Override | |
protected void onPostCreate(Bundle savedInstanceState) { | |
super.onPostCreate(savedInstanceState); | |
getDelegate().onPostCreate(savedInstanceState); | |
} | |
public ActionBar getSupportActionBar() { | |
return getDelegate().getSupportActionBar(); | |
} | |
public void setSupportActionBar(@Nullable Toolbar toolbar) { | |
getDelegate().setSupportActionBar(toolbar); | |
} | |
@Override | |
public MenuInflater getMenuInflater() { | |
return getDelegate().getMenuInflater(); | |
} | |
@Override | |
public void setContentView(@LayoutRes int layoutResID) { | |
getDelegate().setContentView(layoutResID); | |
} | |
@Override | |
public void setContentView(View view) { | |
getDelegate().setContentView(view); | |
} | |
@Override | |
public void setContentView(View view, ViewGroup.LayoutParams params) { | |
getDelegate().setContentView(view, params); | |
} | |
@Override | |
public void addContentView(View view, ViewGroup.LayoutParams params) { | |
getDelegate().addContentView(view, params); | |
} | |
@Override | |
protected void onPostResume() { | |
super.onPostResume(); | |
getDelegate().onPostResume(); | |
} | |
@Override | |
protected void onTitleChanged(CharSequence title, int color) { | |
super.onTitleChanged(title, color); | |
getDelegate().setTitle(title); | |
} | |
@Override | |
public void onConfigurationChanged(Configuration newConfig) { | |
super.onConfigurationChanged(newConfig); | |
getDelegate().onConfigurationChanged(newConfig); | |
} | |
@Override | |
protected void onStop() { | |
super.onStop(); | |
getDelegate().onStop(); | |
} | |
@Override | |
protected void onDestroy() { | |
super.onDestroy(); | |
getDelegate().onDestroy(); | |
} | |
public void invalidateOptionsMenu() { | |
getDelegate().invalidateOptionsMenu(); | |
} | |
private AppCompatDelegate getDelegate() { | |
if (mDelegate == null) { | |
mDelegate = AppCompatDelegate.create(this, null); | |
} | |
return mDelegate; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.activities; | |
import android.annotation.TargetApi; | |
import android.content.Context; | |
import android.content.Intent; | |
import android.content.res.Configuration; | |
import android.media.Ringtone; | |
import android.media.RingtoneManager; | |
import android.net.Uri; | |
import android.os.Build; | |
import android.os.Bundle; | |
import android.preference.ListPreference; | |
import android.preference.Preference; | |
import android.preference.PreferenceActivity; | |
import android.support.v7.app.ActionBar; | |
import android.preference.PreferenceFragment; | |
import android.preference.PreferenceManager; | |
import android.preference.RingtonePreference; | |
import android.support.v7.widget.Toolbar; | |
import android.text.TextUtils; | |
import android.util.TypedValue; | |
import android.view.LayoutInflater; | |
import android.view.MenuItem; | |
import android.support.v4.app.NavUtils; | |
import android.view.ViewGroup; | |
import com.example.R; | |
import java.util.List; | |
/** | |
* A {@link PreferenceActivity} that presents a set of application settings. On | |
* handset devices, settings are presented as a single list. On tablets, | |
* settings are split by category, with category headers shown to the left of | |
* the list of settings. | |
* <p/> | |
* See <a href="http://developer.android.com/design/patterns/settings.html"> | |
* Android Design: Settings</a> for design guidelines and the <a | |
* href="http://developer.android.com/guide/topics/ui/settings.html">Settings | |
* API Guide</a> for more information on developing a Settings UI. | |
*/ | |
public class SettingsActivity extends AppCompatPreferenceActivity { | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setupActionBar(); | |
addPreferencesFromResource(R.xml.pref_settings); | |
int horizontalMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, | |
2, getResources().getDisplayMetrics()); | |
int verticalMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, | |
2, getResources().getDisplayMetrics()); | |
int topMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, | |
(int) getResources().getDimension(R.dimen.activity_vertical_margin) + 30, | |
getResources().getDisplayMetrics()); | |
getListView().setPadding(horizontalMargin, topMargin, horizontalMargin, verticalMargin); | |
} | |
/** | |
* Set up the {@link android.app.ActionBar}, if the API is available. | |
*/ | |
private void setupActionBar() { | |
getLayoutInflater().inflate(R.layout.toolbar, (ViewGroup)findViewById(android.R.id.content)); | |
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); | |
setSupportActionBar(toolbar); | |
ActionBar actionBar = getSupportActionBar(); | |
if (actionBar != null) { | |
// Show the Up button in the action bar. | |
actionBar.setDisplayHomeAsUpEnabled(true); | |
} | |
} | |
@Override | |
public boolean onMenuItemSelected(int featureId, MenuItem item) { | |
int id = item.getItemId(); | |
if (id == android.R.id.home) { | |
if (!super.onMenuItemSelected(featureId, item)) { | |
NavUtils.navigateUpFromSameTask(this); | |
} | |
return true; | |
} | |
return super.onMenuItemSelected(featureId, item); | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
@Override | |
public boolean onIsMultiPane() { | |
return isXLargeTablet(this); | |
} | |
/** | |
* Helper method to determine if the device has an extra-large screen. For | |
* example, 10" tablets are extra-large. | |
*/ | |
private static boolean isXLargeTablet(Context context) { | |
return (context.getResources().getConfiguration().screenLayout | |
& Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:local="http://schemas.android.com/apk/res-auto" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:id="@+id/toolbar" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:minHeight="?attr/actionBarSize" | |
android:background="?attr/colorPrimary" | |
android:elevation="@dimen/appbar_elevation" | |
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" | |
android:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> |
Hi, thanks for the tutorial! But the General and Data & Sync screens didn't change, their toolbars still overlap the interface. Can you help me how to fix it?
What is dimensions for activity_vertical_margin?
What is dimensions for activity_vertical_margin?
activity_vertical_margin should be generated by default
For me - gldraphael`s setupActionBar not work, but this
private void setupActionBar() {
ViewGroup rootView = (ViewGroup)findViewById(R.id.action_bar_root);
View view = getLayoutInflater().inflate(R.layout.app_bar_layout, rootView, false);
rootView.addView(view, 0);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
// Show the Up button in the action bar.
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
work !
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<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/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
Don`t work, no setting padding top in Lollipop
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Focused dashboard,!Fine-grained permissions..?Repositoryne..!