ActionBar three-dot dropdown opens at the wrong place - java

I've implemented an ActionBar with the com.android.support:appcompat-v7:22.1.1 library. Here you can see the code and my question:
ActionBar with appcompat library v7 (ava.lang.IllegalStateException: You need to use a Theme.AppCompat theme)
That works, but I have one last problem. After changing the ActionBar to the new library, the settings dropdown opens into the actionbar and not among it (see image) and the background of the settings dropdown is grey instead of white?
How can I solve that?

Answering the first part of your question, the placement/location of the dropdown menu is supposed to be that way according to the Material Design guidelines, so that's not a bug.
Concerning the second part, to change the color of the dropdown menu to white, in styles.xml, add the following lines:
<style name="AppTheme" parent="#style/Theme.AppCompat.Light.DarkActionBar">
<item name="android:popupMenuStyle">#style/popupMenuStyle</item>
</style>
<style name="popupMenuStyle" parent="#android:style/Widget.PopupMenu">
<item name="android:popupBackground">#FFFFFF</item>
</style>
And in your AndroidManifest.xml, replace:
android:theme="#style/Theme.AppCompat.Light.DarkActionBar">
with:
android:theme="#style/AppTheme">

Related

Best practice to place menu Icons on the left side of the navigation drawer in Persian,Hebrew devices?

I am trying to have a navigation drawer that opens from the right. ( i managed to do that using LAYOUT_GRAVITY="END").
Now I want all the menu items to start from the right and also their Icons on the right too.
To do that I added (SUPPORTSRTL="TRUE") to the manifest and that also solved the problem. But here is the problem:
if the device's language is set to English, everything works perfectly.
But if the device's language is set to Persian(which is a RTL language) then everything else in the app will be right to left. That means what ever I put in the right goes to left and what ever that is set to the left goes to the right. I even tried using "start" and "end" instead of "right" and "left" but that didn't solve the problem.
To solve that I had to set the (LAYOUTDIRECTION="LTR") to the root element of layouts on every one of my actitives. That solved the problem and now everything is in the position I desired, however this doesn't seem like a sustainable solution to add this line of code to root element of each activity I will ever add to my app.
Can you please tell me if this is the best way to do it or not?
I found other questions with the same topic with no accepted proper answers.
this line of code should solve your problem
ViewCompat.setLayoutDirection(drawer, ViewCompat.LAYOUT_DIRECTION_RTL);
drawer is a reference to your DrawerLayout.
an other way to force RTL layout to activities is using styles xml. this is how i whould do it:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.MaterialComponents.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>
<style name="ShaliRTL" parent="AppTheme">
<item name="android:layoutDirection">rtl</item>
</style>
</resources>
then in android manifest apply this new style (ShaliRTL) to your specific activity:
<activity
android:name=".YourActivity"
android:label="#string/title_activity_settings"
android:theme="#style/ShaliRTL"
android:screenOrientation="fullSensor" />
good luck.

How do I make the android home button bar transparent? [duplicate]

This question already has answers here:
completely transparent status bar and navigation bar on lollipop
(12 answers)
Closed 5 years ago.
My app has a black bar over these home buttons and i need them to look transparent like below
set style to your main theme like below code
<resources>
<style name="Theme" parent="android:Theme.Material.Wallpaper.NoTitleBar">
<item name="android:statusBarColor">#android:color/transparent</item>
<item name="android:navigationBarColor">#android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
</resources>
To do that inside of an App I used this into styles.xml
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:fitsSystemWindows">true</item>
set navigationBarColor to change color.
Check here to see flags required to mention. If color is opaque then there is different set of flags else another set of flags.
void setNavigationBarColor (int color)
Blockquote
Sets the color of the navigation bar to . For this to take effect, the
window must be drawing the system bar backgrounds with
FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS and FLAG_TRANSLUCENT_NAVIGATION must
not be set. If is not opaque, consider setting
SYSTEM_UI_FLAG_LAYOUT_STABLE and
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION.
The transitionName for the view background will be
"android:navigation:background".

How would I dynamically change the font color for a whole android app?

I have my styles.xml file for the app:
<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>
<item name="android:textColor">#000000</item>
<item name="android:background">#FFFFFF</item>
</style>
I want to make it so that if a user selects a value from a spinner then that value changes the textColor in the styles app.
I have my onClick method and I have the value from the spinner but I can't figure out how I access the textColor styles item and how I dynamically change it?
I didn't manage to do exactly what I wanted but a workaround was that I only let the user choose between 3 font colours: black, blue, and red, and then I had 3 themes. Each theme had the different text colour.
Then I just switched the theme following this answer: Android - Change app Theme on onClick
One way to achieve this is to make a color.xml resource in the rescourses folder and link to it in the activity layout.
Also why do you have css as one of the tags for this question?
Rather it should be XML.

Changing actionBar dropdown background color

How do i change the color of the background where it says "add contact" and "about". Now its kind of grayish, but i want it to be white! This is a actionBar with dropdown, not a spinner. And im not using that actionbarsherlock thing.
For example, in you exisiting parent Style definition, add just the android:popupMenuStyle attribute as shown below:
<style name="Theme.Example" parent="#android:style/Theme.Holo.Light">
<item name="android:popupMenuStyle">#style/PopupMenu.Example</item>
.......
.......
</style>
And override the android:popupMenuStyle attribute by defining your style:
<style name="PopupMenu.Example" parent="#android:style/Widget.Holo.Light.ListPopupWindow">
<item name="android:popupBackground">#drawable/menu_dropdown_panel_example</item>
</style>
The #drawable/menu_dropdown_panel_example is this:
You can either choose to use an image similar to the one above, or use an Color resource.
And this is for the default ActionBar. Not the ActionBarSherlock. ;-)
ActionBar styles can be easily created using this cool website: http://jgilfelt.github.com/android-actionbarstylegenerator/. I usually experiment a little here before deciding on the style. Plus, it lets you download the styles and all necessary resources. Just plug them in your app and you are good to go. :-)
UPDATED: I think I caused some confusion which has resulted in the loss of the shadow on your app's drop-down. You may have replaced all the <items> in your Style that I listed in the original suggestion. The edit should fix that.
UPDATE 2:
Use these image resources instead of the #android:color/white value you are currently using. These are in the order of XHDPI, HDPI and MDPI. Save them and use them in the Style definition.
Try to get styles from ActionBarStyleGenerator service. It has preview and makes all necessary drawable, xml and styles.
There you can easily find and change required color and then find it in sources (in your case it is android:popupBackground).
You can simple override itemBackground item in your theme:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:itemBackground">#color/skyBlue</item>
</style>

ActionSherlockBar Styling - PopupMenu

Styling is a place for improvement in my knowledge of the android platform. Given I've being trying to make a simple change all morning and been unable to achieve it.
I want to change the style of the overflow menu in the action bar. I have been able to change the background color, and add animations, so that when clicked it fades to a selected colour. But for the life of me I cannot change the text colour.
Below are two screenshots, one using the Theme.Sherlock and the other using Theme.Sherlock.Light.
Theme.Sherlock - This is my current setting which I have customised. What I want is the overflow (aka android:popupmenu) to be in the holo theme (as below), and ideally so that I can change the text colour.
Theme.Sherlock.Light - This theme shows the style of overflow menu that I want to see. However, as highlighted in red, the overflow button is the wrong colour, and this theme also draws a horizontal line.
I don't know whether it is best/easier to change Theme.Sherlock with the popup issue, or Theme.Sherlock.Light with the overflow icon and line issue. The application is of a "Light" theme so option two is probably the long term better choice, however i'll accept an answer that can solve the problem by changing either theme.
p.s. Where do you find a list of attributes for changing theme/styles, auto-complete is very incomplete in eclipse.
Update
This is actually an update for native action bars as im back to the same problem, but no longer supporting 2.3 or below.
<style name="AppTheme" parent="android:Theme.Holo.Light">
<item name="android:actionOverflowButtonStyle">#style/OverFlow</item>
</style>
<style name="OverFlow" parent="#android:style/Widget.Holo.ActionButton.Overflow">
<item name="android:src">**Insert your icon here**</item>
</style>
This answer is probably coming too late, but to those who may stumble across this question. I find it interesting that you were able to change the overflow's background color. I found that extremely difficult to figure out whereas changing the text was pretty straight forward. Just override the android:itemTextAppearance value in your custom theme.
<item name="android:itemTextAppearance">#style/your_new_text_appearance</item>
<style name="your_new_text_appearance">
<item name="android:textColor">#color/red</item>
</style>
I'm not familiar with ActionBarSherlock, but you can find the standard OverFlow icons on your harddisk in the folder
path\to\android\android-sdk\platforms\android-api-level\data\res\drawable-resolution
and they are called ic_menu_moreoverflow_normal_holo_dark.pngand ic_menu_moreoverflow_normal_holo_light.png
Alternatively you can find them online here.
I believe that the left circle is a drawable, too. Look inside the res\drawable.
Simple do the following:
1. In the theme.xml in your app theme style add this item:
<item name="popupMenuStyle">#style/PopupMenu</item>
2. In styles.xml add this new style:
<style name="PopupMenu" parent="#style/Widget.Sherlock.Light.ListPopupWindow">
<item name="android:textSize">14sp</item>
</style>
In the style you may override text size or other parameters as you want.
Try to override style of Theme.Sherlock with help of Android Action Bar Style Generator

Categories

Resources