Recently I've discovered that I can define shapes in an xml file. Until now I was using nine patch images to create custom buttons etc. When I tried with an xml defined shape it didn't worked. None of the shaps, also from stackoverflow which were provided as examples didn't show up. I've seen that someone has already had a similar problem, however eventually it worked on an actual device. Well in my case it didn't.
Here's the navigation_bar.xml I've tried:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient android:startColor="#FFFF0000" android:endColor="#80FF00FF"
android:angle="270"/>
<padding android:left="7dp" android:top="7dp"
android:right="7dp" android:bottom="7dp" />
<corners android:radius="8dp" />
and then used in:
<TextView
android:id="#+id/main_navigation_bar"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:background="#drawable/navigation_bar"/>
The background stays as default/black, nothing is shown.
Am I missing something here? I've also looked at ApiDemos, official documentation and didn't find anything to solve my problem.
Is it better to stay with nine patch images?
Thanks for the replies.
When tweaking a little with code, I've noticed strange behaviour. My IDE is IntelliJ.
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:visible="true"
android:shape="rectangle">
<gradient
android:startColor="#FF89B4EE"
android:endColor="#FF5791E6"
android:type="linear"
android:angle="90"/>
<size
android:height="fill_parent"
android:dfv="fill_parent" />
I made an intentional typo and code compiled. It looks like shape is being ignored or something. Anyone noticed anything similar?
did you try putting the size of the shape? maybe is a dumb question but works for me, i also write the shapes without size and without "shape rectangle"...
something like this
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#FF89B4EE"
android:endColor="#FF5791E6"
android:type="linear"
android:angle="90"/>
</shape>
maybe you can read here a full documentation of android xml shape elements.
cheers
Does your navigation_bar.xml have your xml version header at the top? That is:
<?xml version ="1.0" encoding="utf-8"?>
I'm sure you probably do; I don't know about IntelliJ, but Eclipse won't build without it. Never hurts to check the simple solutions, though. :)
Related
Since i updated my device to android 10 im facing a weird problem with one of my background gradients.
I have a RelativeLayout with a gradient background drawable looking like this.
<RelativeLayout
android:id="#+id/layoutSpeedLegend"
android:layout_width="match_parent"
android:layout_height="18dp"
android:background="#drawable/background"/>
My background.xml is looking like this.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<gradient
android:centerColor="#color/yellow"
android:endColor="#color/red"
android:startColor="#color/darkgreen"
android:centerX="50%"/>
<corners android:radius="15dp" />
</shape>
</item>
In the editors preview, everything looks fine
But on my real test device is looks like this.
Also adding android:angle="90" to my background.xml doesn't work.
Does anybody have an idea why this happens?
It's a bug reported here. And may not be resolved yet.
The workaround is set angle="0" as you mentioned in question's comment.
I am trying to get a glow effect like the background for edittext
I tried doing it but the background is not as much effective as the image
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#68F30606"/>
<corners android:radius="10dp" />
</shape>
</item>
<item
android:left="1.7dp"
android:right="1.7dp"
android:top="1.7dp"
android:bottom="1.7dp">
<shape android:shape="rectangle">
<solid android:color="#android:color/white"/>
<corners android:radius="10dp" />
</shape>
</item>
</layer-list>
Can someone help me to solve this mystery?
Then you will need to use the old-technique(kind of) of 9-Patch Drawing. I used to do it too. Examples are scarce because they are big, but there is documentation.
Documentation: https://developer.android.com/studio/write/draw9patch.
Also, if this helps you can check this too: Outer glow in edittext
To use the 9-Patch images in Xml to this (remember this is after you have created the 9-Patch Images):
Reference the drawable with the name but don't include .9.png (auto-complete in eclipse will take care of this)
Make sure you only have 1 image under the main /drawable folder (not a version for each dpi folder)
The image must be specified using :background, not :src (this got me stuck for a while)
android:background="#drawable/splash_logo"
Make sure the image and layout that contains it are using:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
Credit To: Creating & Using 9-patch images in Android
Also, check this website out, it contains a lot of useful examples that the documentation doesn't provide:
https://tekeye.uk/android/examples/ui/android-9-patch-image-files
This is my first venture into writing any kind of code, let alone an android app. I created the project with the compileSdkVersion of 28, targetSdkVersion of 28 and minSdkVersion of 23. The app will only run on Android Pie and crashes on any previous version I have tried to install it on.
Everything compiles properly and works wonderfully on the emulator and my personal phone (both on Pie). I have read a lot about using the Android Support Library, however, I have not seen any information on how to understand which parts of your code need to use things from the support library versus the framework. Android Studio may have given me warnings along the way about using things from the support library, but being new at this, I did not know what it meant or what my proper choice should be. Now that I understand, I don't know how to attack going back and finding (and then fixing) anything that needs to use the support libraries.
I imported com.android.support:appcompat-v7 and have used AppCompatActivity instead of Activity. In a nutshell, I use textViews, editTexts, spinners and a TabHost (with two tabs). I think that the ActionBar might be a problem as well, but do not know how to see if that is the problem and how to fix it.
The rest of the code is mathematical calculations with a bunch of if/then/else statements and some switch statements.
The app force closes when it is opened after being installed on any OS prior to Android Pie.
Snippet from content_main.xml (layout):
<Spinner
android:id="#+id/spnFromPool"
android:layout_width="176dp"
android:layout_height="34dp"
android:layout_gravity="start"
android:layout_weight="0.3"
android:background="#drawable/bg_spinner"
android:entries="#array/pool_type_array" />
bg_spinner.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#color/swimToolPrimary"/>
<corners android:radius="10dp" />
<stroke android:color="#000000" android:width="1dp" />
</shape>
</item>
<item android:gravity="center_vertical|right" android:right="8dp">
<layer-list>
<item android:width="12dp" android:height="12dp" android:gravity="center" android:bottom="10dp"
tools:targetApi="m">
<rotate
android:fromDegrees="45"
android:toDegrees="45">
<shape android:shape="rectangle">
<solid android:color="#color/swimToolSecondary" />
<stroke android:color="#color/swimToolSecondary" android:width="1dp"/>
</shape>
</rotate>
</item>
<item android:width="20dp" android:height="10dp" android:bottom="21dp" android:gravity="center"
tools:targetApi="m">
<shape android:shape="rectangle">
<solid android:color="#color/swimToolPrimary"/>
</shape>
</item>
</layer-list>
</item>
</layer-list>
You can check the problem in log of android studio by selecting "No Filters" in top-right corner in logcat and for filtering the data you can add package name of your app in search bar.
I'm making a very basic test app in Android Studio. I am creating an xml file for a button pressed event, but for some reason it is not highlighting any keywords. I have updated android studio. I am at a loss for how to solve this, as it's a new process to me.
The message the lightbulb gives me is "Unexpected text found in layout file" when I try to define these attributes for the bt_pressed XML.
Make sure your attribute is nested properly in the tag. Like this:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#color/some_color" />
</shape>
(hint: look at the > character in your provided snippet)
Incorrectly placed ">" in line 2.
I made the rectangle below for a project recently and it worked just fine. Nest it in the in between your first shape tag.
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<shape android:shape="rectangle">
<corners android:radius="3dip" />
<solid android:color="#color/colorTwo" />
</shape>
</shape>
Alternatively, don't nest anything and change your opening shape tag to this:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
So, I need to create three different buttons which look almost the same: all of them have rounded corners but different background colors. What I did is to have three different shapes created and give them a particular color. Although this approach gets the job done, I think there's gotta be a better and less cumbersome way to do this.
I've found a workaround to this by changing the background dynamically, but I was wondering whether there's an easier way to have this done without having to write any Java code.
This is the code for all three of the drawables:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="4dp"/>
<padding
android:bottom="15dp"
android:top="15dp"
android:left="15dp"
android:right="15dp" />
<solid
android:color="#color/green" />
</shape>
Is there any way to use "some kind of inheritance" to extend the code above to have three different "children" of this shape by only adding / overriding some of the parent's properties?
Thanks in advance!