I built my own TabHost with this code:
I have a problem that when i open a new Activity from one of this TabHost's activities so the new activity opened without the TabSelector.
public void onCreate(Bundle savedInstanceState) {
/*super.onCreate(savedInstanceState);
setContentView(R.layout.main); */
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.tabhost);
setupTabHost();
mTabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);
setupTab(new TextView(this), "Search", new Intent(this,Search.class),R.drawable.icon_search);
setupTab(new TextView(this), "Info",new Intent(this,Info.class),R.drawable.icon_info);
setupTab(new TextView(this), "About", new Intent(this,About.class),R.drawable.icon_about);
mTabHost.setCurrentTab(2);
}
private void setupTab(final View view, final String tag, final Intent i_TagIntent, int i_Icon) {
View tabview = createTabView(mTabHost.getContext(), tag,i_Icon);
TabSpec setContent = mTabHost.newTabSpec(tag).setIndicator(tabview).setContent(
new Intent(i_TagIntent));
mTabHost.addTab(setContent);
}
private static View createTabView(final Context context, final String text, int i_Icon) {
View view = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null);
TextView tv = (TextView) view.findViewById(R.id.tabsText);
tv.setText(text);
ImageView icon = (ImageView) view.findViewById(R.id.tabsIcon);
icon.setImageResource(i_Icon);
return view;
}
private void setupTabHost() {
mTabHost = (TabHost) findViewById(android.R.id.tabhost);
mTabHost.setup();
}
I am currently working on tab hosts as well, and I have yet to diagnose your specific issue. However, I do have one bit of what I hope is helpful advice. You have set up your code to hide your action/title bar programmatically. There is another way to do this, that I would suggest is cleaner. With the way you are doing it, the first time you launch this app on your emulator, you will see the bar pop up for a moment and then disappear. The second time you open the app, it won't appear. Beyond that, as you switch activities, sometimes it will reappear before that particular line of code executes. So, the better way to get the result of no action/title bar is via the AndroidManifest.xml document:
<application
android:icon="#drawable/ic_launcher"
android:label="#string/app_name" >
<activity
android:theme="#android:style/Theme.Holo.NoActionBar"
android:name=".Polling"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
As you can see, the fifth (5) line of this code is what I just mentioned. I suppose you could call this a design philosophy or best practice, but it looks much better on the screen when you add the line in the XML rather than the code. Doing it this way prevents the times where the action/title bar does appear - it will always be gone.
My final note would be about your tab question. I encourage you to take a look at this page: http://developer.android.com/guide/topics/ui/actionbar.html and scroll/Ctrl+f to the portion about Adding Navigation Tabs. These are how some newer Google applications are accomplishing the role tabs will play in your application. Unfortunately, it's fairly more complex than TabHost. I was in the exact same boat as you a couple days ago: making an app where I got rid of my action bar. Then I discovered this action bar tab system (after having seen it on my own android phone and liking it) and decided I wanted to employ it instead of a tab host. But... like I said, it's a bit over my head still, so I'm going to have to learn a few precursors first.
Related
When the user marks some text (inside of an EditText, WebView...) a floating text selection popup appears, where apps can add custom items. Can someone please give me an example, how to add an item to this popup menu which makes an intent and transfers the selected String to my activity.
This blog tutorial will show you how: https://medium.com/google-developers/custom-text-selection-actions-with-action-process-text-191f792d2999
Basically, in your Manifest file, add PROCESS_TEXT intent filter to the activity that will handle the text shared from popup menu.
<activity
android:name=".ProcessTextActivity"
android:label="#string/process_text_action_name">
<intent-filter>
<action android:name="android.intent.action.PROCESS_TEXT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
Then, you would process that text in your Activity like this
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.process_text_main);
CharSequence text = getIntent()
.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT);
// process the text
}
Android Studio 0.4.5
Android documentation for creating custom dialog boxes: http://developer.android.com/guide/topics/ui/dialogs.html
If you want a custom dialog, you can instead display an Activity as a dialog instead of using the Dialog APIs. Simply create an activity and set its theme to Theme.Holo.Dialog in
the <activity> manifest element:
<activity android:theme="#android:style/Theme.Holo.Dialog" >
However, when I tried this I get the following exception:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
I am supporting the following, and I can't using something greater than 10 for the min:
minSdkVersion 10
targetSdkVersion 19
In my styles I have the following:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
And in my manifest I have this for the activity:
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:theme="#android:style/Theme.Holo.Light.Dialog"
android:name="com.ssd.register.Dialog_update"
android:label="#string/title_activity_dialog_update" >
</activity>
Creating the dialog box like this was something I was hopping to do, as I have already completed the layout.
Can anyone tell me how I can get around this problem?
The reason you are having this problem is because the activity you are trying to apply the dialog theme to is extending ActionBarActivity which requires the AppCompat theme to be applied.
Update: Extending AppCompatActivity would also have this problem
In this case, change the Java inheritance from ActionBarActivity to Activity and leave the dialog theme in the manifest as it is, a non Theme.AppCompat value
The general rule is that if you want your code to support older versions of Android, it should have the AppCompat theme and the java code should extend AppCompatActivity. If you have *an activity that doesn't need this support, such as you only care about the latest versions and features of Android, you can apply any theme to it but the java code must extend plain old Activity.
NOTE: When change from AppCompatActivity (or a subclass, ActionBarActivity), to Activity, must also change the various calls with "support" to the corresponding call without "support". So, instead of getSupportFragmentManager, call getFragmentManager.
All you need to do is add android:theme="#style/Theme.AppCompat.Light" to your application tag in the AndroidManifest.xml file.
Copying answer from #MarkKeen in the comments above as I had the same problem.
I had the error stated at the top of the post and happened after I added an alert dialog. I have all the relevant style information in the manifest. My problem was cured by changing a context reference in the alert builder - I changed:
new android.support.v7.app.AlertDialog.Builder(getApplicationContext())
to:
new android.support.v7.app.AlertDialog.Builder(this)
And no more problems.
If you are using the application context, like this:
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
change it to an activity context like this:
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
min sdk is 10. ActionBar is available from api level 11. So for 10 you would be using AppCompat from the support library for which you need to use Theme.AppCompat or descendant of the same.
Use
android:theme="#style/Theme.AppCompat" >
Or if you dont want action bar at the top
android:theme="#style/Theme.AppCompat.NoActionBar">
More info #
http://developer.android.com/guide/topics/ui/actionbar.html
Edit:
I might have misread op post.
Seems op wants a Dialog with a Activity Theme. So as already suggested by Bobbake4 extend Activity instead of ActionBarActivity.
Also have a look # Dialog Attributes in the link below
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/
I was experiencing this problem even though my Theme was an AppCompat Theme and my Activity was an AppCompatActivity (or Activity, as suggested on other's answers). So I cleaned, rebuild and rerun the project.
(Build -> Clean Project ; Build -> Rebuild Project ; Run -> Run)
It may seem dumb, but now it works great!
Just hope it helps!
This is what fixed it for me: instead of specifying the theme in manifest, I defined it in onCreate for each activity that extends ActionBarActivity:
#Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.MyAppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity_layout);
...
}
Here MyAppTheme is a descendant of Theme.AppCompat, and is defined in xml. Note that the theme must be set before super.onCreate and setContentView.
go to your styles and put the parent
parent="Theme.AppCompat"
instead of
parent="#android:style/Theme.Holo.Light"
Change the theme of the desired Activity. This works for me:
<activity
android:name="HomeActivity"
android:screenOrientation="landscape"
android:theme="#style/Theme.AppCompat.Light"
android:windowSoftInputMode="stateHidden" />
In my case i have no values-v21 file in my res directory. Then i created it and added in it following codes:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#color/colorPrimary</item>
<item name="colorPrimaryDark">#color/colorPrimaryDark</item>
<item name="colorAccent">#color/colorAccent</item>
</style>
Just Do
new AlertDialog.Builder(this)
Instead of
new AlertDialog.Builder(getApplicationContext())
I had such crash on Samsung devices even though the activity did use Theme.AppCompat.
The root cause was related to weird optimizations on Samsung side:
- if one activity of your app has theme not inherited from Theme.AppCompat
- and it has also `android:launchMode="singleTask"`
- then all the activities that are launched from it will share the same Theme
My solution was just removing android:launchMode="singleTask"
If you need to extend ActionBarActivity you need on your style.xml:
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
If you set as main theme of your application as android:Theme.Material.Light instead of AppTheme.Base then you’ll get an “IllegalStateException:You need to use a Theme.AppCompat theme (or descendant) with this activity” error.
I had the same problem, but it solved when i put this on manifest: android:theme="#style/Theme.AppCompat.
<application
android:allowBackup="true"
android:icon="#drawable/icon"
android:label="#string/app_name_test"
android:supportsRtl="true"
android:theme="#style/Theme.AppCompat">
...
</application>
for me a solution, after trying all solutions from here, was to change
<activity
android:name="com.github.cythara.MainActivity"
android:label="Main">
</activity>
to include a theme:
<activity
android:name="com.github.cythara.MainActivity"
android:theme="#style/Theme.AppCompat.NoActionBar"
android:label="Main">
</activity>
In my case such issue was appear when i tried to show Dialog.
The problem was in context, I've use getBaseContext() which theoretically should return Activity context, but appears its not, or it return context before any Theme applied.
So I just replaced getBaseContexts() with "this", and now it work as expected.
Dialog.showAlert(this, title, message,....);
You have came to this because you want to apply Material Design in your theme style in previous sdk versions to 21. ActionBarActivity requires AppThemeso if you also want to prevent your own customization about your AppTheme, only you have to change in your styles.xml (previous to sdk 21) so this way, can inherit for an App Compat theme.
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
for this:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
I had an activity with theme <android:theme="#android:style/Theme.Dialog"> used for showing dialog in my appWidget and i had same problem
i solved this error by changing activity code like below:
#Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Theme_AppCompat_Dialog); //this line i added
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
}
Make sure you are using an activity context while creating a new Alert Dialog and not an application or base context.
for me was solution to use ContextThemeWrapper:
private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}
from Android - How to create FAB programmatically?
I had this problem as well and what I did to fix it, AND still use the Holo theme was to take these steps:
first I replaced this import:
import android.support.v7.app.AppCompatActivity;
with this one:
import android.app.Activity;
then changed my extension from:
public class MyClass extends AppCompatActivity {//...
to this:
public class MyClass extends Activity {//...
And also had to change this import:
import android.support.v7.app.AlertDialog;
to this import:
import android.app.AlertDialog;
and then you can use your theme tag in the manifest at the activity level:
android:theme="#android:style/Theme.Holo.Dialog" />
and lastly, (unless you have other classes in your project that has to use v7 appCompat) you can either clean and rebuild your project or delete this entry in the gradle build file at the app level:
compile 'com.android.support:appcompat-v7:23.2.1'
if you have other classes in your project that has to use v7 appCompat then just clean and rebuild the project.
In case the AndroidX SplashScreen library brought you here ...
This is because Theme.SplashScreen also has no R.styleable.AppCompatTheme_windowActionBar:
if (!a.hasValue(R.styleable.AppCompatTheme_windowActionBar)) {
a.recycle();
throw new IllegalStateException(
"You need to use a Theme.AppCompat theme (or descendant) with this activity.");
}
This requires switching the theme to the postSplashScreenTheme, before calling super():
#Override
protected void onCreate(Bundle savedInstanceState) {
/* When switching the theme to dark mode. */
if (savedInstanceState != null) {
this.setTheme(R.style.AppTheme);
}
super.onCreate(savedInstanceState);
/* When starting the Activity. */
if (savedInstanceState == null) {
SplashScreen.installSplashScreen(this);
}
}
Then the Theme.SplashScreen from AndroidManifest.xml won't interfere.
Also quite related: When using Theme.MaterialComponents, there's a bridge theme contained, which works as substitute for Theme.AppCompat: Theme.MaterialComponents.DayNight.NoActionBar.Bridge.
This Bridge theme works despite Theme.MaterialComponents not inherits from Theme.AppCompat:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge" />
<style name="AppTheme.SplashScreen" parent="Theme.SplashScreen" />
</resources>
You have many solutions to that error.
You should use Activity or FragmentActivity instead of ActionbarActivity or AppCompatActivity
If you want use ActionbarActivity or AppCompatActivity, you should change in styles.xml Theme.Holo.xxxx to Theme.AppCompat.Light (if necessary add to DarkActionbar)
If you don't need advanced attributes about action bar or AppCompat you don't need to use Actionbar or AppCompat.
In Android manifest just change theme of activity to AppTheme as follow code snippet
<activity
android:name=".MainActivity"
android:label="#string/app_name"
android:theme="#style/AppTheme">
</activity>
In my experiences the problem was the context where I showed my dialog.
Inside a button click I instantiate an AlertDialog in this way:
builder = new AlertDialog.Builder(getApplicationContext());
But the context was not correct and caused the error. I've changed it using the application context in this way:
In declare section:
Context mContext;
in the onCreate method
mContext = this;
And finally in the code where I need the AlertDialog:
start_stop = (Button) findViewById(R.id.start_stop);
start_stop.setOnClickListener( new View.OnClickListener()
{
#Override
public void onClick(View v)
{
if (!is_running)
{
builder = new AlertDialog.Builder(mContext);
builder.setMessage("MYTEXT")
.setCancelable(false)
.setPositiveButton("SI", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Task_Started = false;
startTask();
}
})
.setNegativeButton("NO",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
}
This is the solution for me.
I was getting this same problem. Because i was creating custom navigation drawer. But i forget to mention theme in my manifest like this
android:theme="#style/Theme.AppCompat.NoActionBar"
As soon i added the above the theme to my manifest it resolved the problem.
I have faced same problem.
If you are providing context to any class or method then provide YourActivityName.this instead of getApplicationContext().
Do this
builder = new AlertDialog.Builder(YourActivity.this);
Instead of
builder = new AlertDialog.Builder(getApplicationContext());
Change your theme style parent to
parent="Theme.AppCompat"
This worked for me ...
This one worked for me:
<application
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="#string/app_name"
android:theme="#style/Theme.AppCompat.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Your Activity is extending ActionBarActivity which requires the AppCompat.theme to be applied.
Change from ActionBarActivity to Activity or FragmentActivity, it will solve the problem.
If you use no Action bar then :
android:theme="#android:style/Theme.Light.NoTitleBar.Fullscreen"
I am learning Navigation Drawer. In most of the examples given on internet, fragments are used.
My requirement is:
Home activity should contain Navingation Drawer
When I click on any item in the navigation drawer, a new activity should get opened with the BACK arrow (<--)
When I click on the BACK arrow, again I come to the Home screen with Navigation Drawer
If I look into most of the applications installed on my mobile like PayTM, all are operating like this.
My Approach
I am adding a Navigation Drawer Activity and making it the MAIN activity in the Manifest file like this:
<activity
android:name=".NavigationDrawerActivity"
android:label="#string/title_activity_navigation_drawer"
android:theme="#style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Adding BACK button in all other activities which open from the menu items of this drawer like this:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_select_class);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
Question: Should I make Navigation Drawer Activity as Home Screen and call other activities from here (By clicking on menu items on the navigation drawer)? Is this the right approach? Do other applications also use this approach which use Navigation Drawer? If this is not the best approach, then how should I implement my requirement? Do I need fragments as mentioned in almost all the tutorials of Navigation Drawer?
Thanks!
Common NavigationDrawer Across All Activity Example is here
refer below Link for that
Common NavigationDrawer
this is Example of open Activity from NavigationDrawer and if u extend BaseActivity than NavigationDrawer will implement on that activity and where u do not want navigation drawer, do not extend BaseActivity
Android Studio 0.4.5
Android documentation for creating custom dialog boxes: http://developer.android.com/guide/topics/ui/dialogs.html
If you want a custom dialog, you can instead display an Activity as a dialog instead of using the Dialog APIs. Simply create an activity and set its theme to Theme.Holo.Dialog in
the <activity> manifest element:
<activity android:theme="#android:style/Theme.Holo.Dialog" >
However, when I tried this I get the following exception:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
I am supporting the following, and I can't using something greater than 10 for the min:
minSdkVersion 10
targetSdkVersion 19
In my styles I have the following:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
And in my manifest I have this for the activity:
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:theme="#android:style/Theme.Holo.Light.Dialog"
android:name="com.ssd.register.Dialog_update"
android:label="#string/title_activity_dialog_update" >
</activity>
Creating the dialog box like this was something I was hopping to do, as I have already completed the layout.
Can anyone tell me how I can get around this problem?
The reason you are having this problem is because the activity you are trying to apply the dialog theme to is extending ActionBarActivity which requires the AppCompat theme to be applied.
Update: Extending AppCompatActivity would also have this problem
In this case, change the Java inheritance from ActionBarActivity to Activity and leave the dialog theme in the manifest as it is, a non Theme.AppCompat value
The general rule is that if you want your code to support older versions of Android, it should have the AppCompat theme and the java code should extend AppCompatActivity. If you have *an activity that doesn't need this support, such as you only care about the latest versions and features of Android, you can apply any theme to it but the java code must extend plain old Activity.
NOTE: When change from AppCompatActivity (or a subclass, ActionBarActivity), to Activity, must also change the various calls with "support" to the corresponding call without "support". So, instead of getSupportFragmentManager, call getFragmentManager.
All you need to do is add android:theme="#style/Theme.AppCompat.Light" to your application tag in the AndroidManifest.xml file.
Copying answer from #MarkKeen in the comments above as I had the same problem.
I had the error stated at the top of the post and happened after I added an alert dialog. I have all the relevant style information in the manifest. My problem was cured by changing a context reference in the alert builder - I changed:
new android.support.v7.app.AlertDialog.Builder(getApplicationContext())
to:
new android.support.v7.app.AlertDialog.Builder(this)
And no more problems.
If you are using the application context, like this:
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
change it to an activity context like this:
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
min sdk is 10. ActionBar is available from api level 11. So for 10 you would be using AppCompat from the support library for which you need to use Theme.AppCompat or descendant of the same.
Use
android:theme="#style/Theme.AppCompat" >
Or if you dont want action bar at the top
android:theme="#style/Theme.AppCompat.NoActionBar">
More info #
http://developer.android.com/guide/topics/ui/actionbar.html
Edit:
I might have misread op post.
Seems op wants a Dialog with a Activity Theme. So as already suggested by Bobbake4 extend Activity instead of ActionBarActivity.
Also have a look # Dialog Attributes in the link below
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/
I was experiencing this problem even though my Theme was an AppCompat Theme and my Activity was an AppCompatActivity (or Activity, as suggested on other's answers). So I cleaned, rebuild and rerun the project.
(Build -> Clean Project ; Build -> Rebuild Project ; Run -> Run)
It may seem dumb, but now it works great!
Just hope it helps!
This is what fixed it for me: instead of specifying the theme in manifest, I defined it in onCreate for each activity that extends ActionBarActivity:
#Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.MyAppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity_layout);
...
}
Here MyAppTheme is a descendant of Theme.AppCompat, and is defined in xml. Note that the theme must be set before super.onCreate and setContentView.
go to your styles and put the parent
parent="Theme.AppCompat"
instead of
parent="#android:style/Theme.Holo.Light"
Change the theme of the desired Activity. This works for me:
<activity
android:name="HomeActivity"
android:screenOrientation="landscape"
android:theme="#style/Theme.AppCompat.Light"
android:windowSoftInputMode="stateHidden" />
In my case i have no values-v21 file in my res directory. Then i created it and added in it following codes:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#color/colorPrimary</item>
<item name="colorPrimaryDark">#color/colorPrimaryDark</item>
<item name="colorAccent">#color/colorAccent</item>
</style>
Just Do
new AlertDialog.Builder(this)
Instead of
new AlertDialog.Builder(getApplicationContext())
I had such crash on Samsung devices even though the activity did use Theme.AppCompat.
The root cause was related to weird optimizations on Samsung side:
- if one activity of your app has theme not inherited from Theme.AppCompat
- and it has also `android:launchMode="singleTask"`
- then all the activities that are launched from it will share the same Theme
My solution was just removing android:launchMode="singleTask"
If you need to extend ActionBarActivity you need on your style.xml:
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
If you set as main theme of your application as android:Theme.Material.Light instead of AppTheme.Base then you’ll get an “IllegalStateException:You need to use a Theme.AppCompat theme (or descendant) with this activity” error.
I had the same problem, but it solved when i put this on manifest: android:theme="#style/Theme.AppCompat.
<application
android:allowBackup="true"
android:icon="#drawable/icon"
android:label="#string/app_name_test"
android:supportsRtl="true"
android:theme="#style/Theme.AppCompat">
...
</application>
for me a solution, after trying all solutions from here, was to change
<activity
android:name="com.github.cythara.MainActivity"
android:label="Main">
</activity>
to include a theme:
<activity
android:name="com.github.cythara.MainActivity"
android:theme="#style/Theme.AppCompat.NoActionBar"
android:label="Main">
</activity>
In my case such issue was appear when i tried to show Dialog.
The problem was in context, I've use getBaseContext() which theoretically should return Activity context, but appears its not, or it return context before any Theme applied.
So I just replaced getBaseContexts() with "this", and now it work as expected.
Dialog.showAlert(this, title, message,....);
You have came to this because you want to apply Material Design in your theme style in previous sdk versions to 21. ActionBarActivity requires AppThemeso if you also want to prevent your own customization about your AppTheme, only you have to change in your styles.xml (previous to sdk 21) so this way, can inherit for an App Compat theme.
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
for this:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
I had an activity with theme <android:theme="#android:style/Theme.Dialog"> used for showing dialog in my appWidget and i had same problem
i solved this error by changing activity code like below:
#Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Theme_AppCompat_Dialog); //this line i added
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
}
Make sure you are using an activity context while creating a new Alert Dialog and not an application or base context.
for me was solution to use ContextThemeWrapper:
private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}
from Android - How to create FAB programmatically?
I had this problem as well and what I did to fix it, AND still use the Holo theme was to take these steps:
first I replaced this import:
import android.support.v7.app.AppCompatActivity;
with this one:
import android.app.Activity;
then changed my extension from:
public class MyClass extends AppCompatActivity {//...
to this:
public class MyClass extends Activity {//...
And also had to change this import:
import android.support.v7.app.AlertDialog;
to this import:
import android.app.AlertDialog;
and then you can use your theme tag in the manifest at the activity level:
android:theme="#android:style/Theme.Holo.Dialog" />
and lastly, (unless you have other classes in your project that has to use v7 appCompat) you can either clean and rebuild your project or delete this entry in the gradle build file at the app level:
compile 'com.android.support:appcompat-v7:23.2.1'
if you have other classes in your project that has to use v7 appCompat then just clean and rebuild the project.
In case the AndroidX SplashScreen library brought you here ...
This is because Theme.SplashScreen also has no R.styleable.AppCompatTheme_windowActionBar:
if (!a.hasValue(R.styleable.AppCompatTheme_windowActionBar)) {
a.recycle();
throw new IllegalStateException(
"You need to use a Theme.AppCompat theme (or descendant) with this activity.");
}
This requires switching the theme to the postSplashScreenTheme, before calling super():
#Override
protected void onCreate(Bundle savedInstanceState) {
/* When switching the theme to dark mode. */
if (savedInstanceState != null) {
this.setTheme(R.style.AppTheme);
}
super.onCreate(savedInstanceState);
/* When starting the Activity. */
if (savedInstanceState == null) {
SplashScreen.installSplashScreen(this);
}
}
Then the Theme.SplashScreen from AndroidManifest.xml won't interfere.
Also quite related: When using Theme.MaterialComponents, there's a bridge theme contained, which works as substitute for Theme.AppCompat: Theme.MaterialComponents.DayNight.NoActionBar.Bridge.
This Bridge theme works despite Theme.MaterialComponents not inherits from Theme.AppCompat:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge" />
<style name="AppTheme.SplashScreen" parent="Theme.SplashScreen" />
</resources>
You have many solutions to that error.
You should use Activity or FragmentActivity instead of ActionbarActivity or AppCompatActivity
If you want use ActionbarActivity or AppCompatActivity, you should change in styles.xml Theme.Holo.xxxx to Theme.AppCompat.Light (if necessary add to DarkActionbar)
If you don't need advanced attributes about action bar or AppCompat you don't need to use Actionbar or AppCompat.
In Android manifest just change theme of activity to AppTheme as follow code snippet
<activity
android:name=".MainActivity"
android:label="#string/app_name"
android:theme="#style/AppTheme">
</activity>
In my experiences the problem was the context where I showed my dialog.
Inside a button click I instantiate an AlertDialog in this way:
builder = new AlertDialog.Builder(getApplicationContext());
But the context was not correct and caused the error. I've changed it using the application context in this way:
In declare section:
Context mContext;
in the onCreate method
mContext = this;
And finally in the code where I need the AlertDialog:
start_stop = (Button) findViewById(R.id.start_stop);
start_stop.setOnClickListener( new View.OnClickListener()
{
#Override
public void onClick(View v)
{
if (!is_running)
{
builder = new AlertDialog.Builder(mContext);
builder.setMessage("MYTEXT")
.setCancelable(false)
.setPositiveButton("SI", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Task_Started = false;
startTask();
}
})
.setNegativeButton("NO",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
}
This is the solution for me.
I was getting this same problem. Because i was creating custom navigation drawer. But i forget to mention theme in my manifest like this
android:theme="#style/Theme.AppCompat.NoActionBar"
As soon i added the above the theme to my manifest it resolved the problem.
I have faced same problem.
If you are providing context to any class or method then provide YourActivityName.this instead of getApplicationContext().
Do this
builder = new AlertDialog.Builder(YourActivity.this);
Instead of
builder = new AlertDialog.Builder(getApplicationContext());
Change your theme style parent to
parent="Theme.AppCompat"
This worked for me ...
This one worked for me:
<application
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="#string/app_name"
android:theme="#style/Theme.AppCompat.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Your Activity is extending ActionBarActivity which requires the AppCompat.theme to be applied.
Change from ActionBarActivity to Activity or FragmentActivity, it will solve the problem.
If you use no Action bar then :
android:theme="#android:style/Theme.Light.NoTitleBar.Fullscreen"
Good morning. I've been using android studio to try to make an activity/whole app fullscreen.
There are two methods I have tried, one is in the manifest:
<activity android:name=".ActivityName"
android:label="#string/app_name"
android:theme="#android:style/Theme.Black.NoTitleBar.Fullscreen">
</activity>
(and another attempt in the manifest)
android:theme="#style/FullscreenTheme" >
(and another attempt in the manifest)
android:theme="#android:style/Theme.NoTitleBar">
And the other is in code (onCreate)
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
Time and time again the bar at the top appears in all my activities as seen in the image below.
Does anyone know how to make that dissapear so its fullscreen please.
1) Add theme for Activity
<activity
android:name=".MyActivity"
android:theme="#android:style/Theme.NoTitleBar"/>
OR
2) Handle in Activity
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.setContentView(R.layout.main_layout);
In the onCreate of your activities, use
getActionBar().hide();
I think this will work android:theme="#android:style/Theme.Holo.NoActionBar"
I usually do this:
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
.
.
.