Android: UI old interface - android

For some Activity I'm using #Theme/Dialog, but this appears like old UI 2.3.
If I set the Theme of the Activity in the Manifest as Holo/Dialog, then this work fine, but of course this will not work with older devices.
How to force Holo Theme when available?
I tried with a custom MyTheme, but all the activity that have #android:style/Theme.Dialog, continue to appear like old theme.
My activity look like below:
<activity
android:name=".audio.TempoManager"
android:label="Tempo Manager"
android:theme="#android:style/Theme.Dialog" />
if I change it to #android:style/Theme.Holo.Dialog then on old device the activities will not be open as dialog but as simple activity.

refer to this blog post. it answers your question: holo-everywhere
mainly:
1. you write a theme.xml file defining a MyTheme in res/values/ for all pre-3.0 android versions.
2. write a themes.xml file defining the MyTheme in res/values-v11/ for 3.0+ android versions.
3. in the AndroidManifest.xml define the application theme to be MyTheme.
the first theme inherits from #android:style/Theme.
the second theme inherits from #android:style/Theme.Holo.

If ICS is available on the device it will default to Holo,
If you want to create for instance the ICS font universally on all devices you will need to provide the ttf font file asset and use it in a custom textview and/or buttons etc..

Related

Android: Must a Fragment's Theme be the Same as the Main Activity/App Manifest?

I made a new Fragment and tried to set it's theme to AppCompat.NoActionBar using Android Studio's Design tool. The problem is, once I selected it, the theme did not change and stayed on the default app theme.
After Manually Setting the theme on the Android Manifest to Theme.AppCompat.NoActionBar the Fragment then accepted the Theme Change.
I want to ask the following:
Can Fragments have different Themes independent from the App Manifest or Main Activity? (Since I assume setting the Theme in the App Manifest changes it for all Activities and Fragments).
I was looking for a way to just set the Fragment's theme to AppCompat.NoActionBar but didn't get a way to do it without setting it in the App Manifest.
This is my First Question on StackOverFlow, hope it's a valid question since I couldn't find the answer online. :)

Android Studio: Application themes aren't correctly applied

I'm having trouble modifying the default application theme in Android Studio.
As a really simple test I just want to remove the default ActionBar in a default starting project. I do this by setting a "NoActionBar" theme in the preview pane. When I run the application however, no changes are applied.
Is modifying the theme of an application in AndroidStudio through the preview pane the correct way of applying said theme to your application?
Are there any additional steps that need to be taken to apply the changes and if so, what are they? (if thats the case, its not exactly intuitive that changes in the preview pane don't show up in your actual application)
First, have a look at this answer https://stackoverflow.com/a/29001288/4188219
So, the selected theme for preview is just a way to let you know what effect the selected theme will be, but if you want use some theme to your app when run on device, you must define it in xml or code. That is to say, the preview theme does not affect the actual theme of app.
If you want to remove the action bar then in your manifest file in activity tag enter <android:theme="#android:style/Theme.NoTitleBar">
and also you can start your activity like public class yourclass extends Activity instead of extends ActionBarActivity
Hope it helps ...
you should change theme in Manifest or activity class, something like this:
android:theme="#android:style/Theme.NoTitleBar.Fullscreen"
The easiest way is to simply define the theme the entire application uses, by mentioning it in the manifest file, under the application tag as below, (Since I wanted a dark actionbar so I mentioned that)
<application
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:supportsRtl="true"
android:theme="#style/Theme.AppCompat.DayNight.DarkActionBar">

why do I have to extend S***Activity with HoloEverywhere?

HoloEverywhere seems to work without extending Sherlock classes. Why do I have to change the imports?
I've just added: android:theme="#style/Holo.Theme.Sherlock"
in the manifest tag and the theme seems to work on the emulator (Android 2.2).
Instructions say:
Extend the Activities from com.WazaBe.HoloEverywhere.sherlock.S***Activity
My Question
Is it a must or an alternative way of applying Holo theme individually?
Does extending the activity from com.WazaBe.HoloEverywhere.sherlock.S***Activity also add ActionbarSherlock to the Activity?
Thanks!
If you want a complete Holo theme port to pre-honeycomb devices, you must extend these classes. If not, some simple controls like EditText or similars will be displayed with holo theme, but others more complex like Dialogs will not be holo-styled.

android - how to loop through all activities?

In my android app, i can change the theme, but to see the change I have to exit the app and open it again.
This is how I change the theme.
ThemeSetterActivity.setStyle(signup.this);
which happens on the create event.
But is there some code like this (below) that I can run, and will change the theme for all the activities.
foreach (activity act in app) {
ThemeSetterActivity.setStyle(act.context);
}
thanks
As far as I know you can't do it that way.
What I do is have each activity keep track of what theme it is currently using.
Then in each activities on resume just check if the current theme is still what it should be, if not restart the activity.
An easy way to get that application wide is to just have your base activity class implement that behavior, and then have all activities extend that.
Apply a theme to an Activity or application
To set a theme for all the activities of your application, open the AndroidManifest.xml file and edit the tag to include the android:theme attribute with the style name. For example:
<application android:theme="#style/CustomTheme">
If you want a theme applied to just one Activity in your application, then add the android:theme attribute to the tag instead.
Just as Android provides other built-in resources, there are many pre-defined themes that you can use, to avoid writing them yourself. For example, you can use the Dialog theme and make your Activity appear like a dialog box:
<activity android:theme="#android:style/Theme.Dialog">
use static field and store your theme id;
and in onCreate method use :
yourActivityObj.setTheme(R.style.AppTheme);
maybe id work;

Choosing a style / theme programmatically at run time

I have device A and device B.
I can easily detect if the app is running on device A or on device B.
Now what I need is to use on theme (styles) for device A and other on device B.
How can I do this?
In your Activity.onCreate(), you can call setTheme() to set the theme you would like to use. Note this must be done before you call setContentView() or otherwise create your UI.
Keep in mind that when the user launches your app, the system will show a preview of it while this happen. This previous is based on creating a window that matches the theme declared in your manifest. You want this to match as closely as possible the themes you are going to set in your onCreate() to make the transition to your app as smooth as possible.
If you want your theme to vary based on some device configuration -- such as platform version or screen size -- you can do this all through resources. Just declare different versions of your theme for the different configurations you want. The file layout would be something like:
values/
styles.xml # Required default theme
values-v11/
styles.xml # Theme when running on Android 3.0 or higher
values-xlarge/
styles.xml # Theme when running on an xlarge screen
The -v11 allows you to have a version of the theme that uses a new theme when running on newer platforms while reverting to something compatible on older versions. For example in the values-v11 style your theme's parent could be the new #android:style/Theme.Holo, while the basic one would inherit from the older #android:style/Theme.
Also Android 3.0 gives you a way to change your theme at runtime, by asking that your activity being restarted like when a configuration change happens: http://developer.android.com/reference/android/app/Activity.html#recreate()
After calling that, the new instance of the Activity that gets created can call setTheme() with a different value (based for example on information in the saved instance state or a shared preference) than the theme that was previously being used.

Categories

Resources