How to change textView shape and color in Android Studio - android-studio

I have looked everywhere to change the textView shape AND color and the only solution I can find is to make a drawable resource file. Which I did:
rounded_blue.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#00BCD4" />
<stroke
android:width="3dp"
android:color="#ffffff" />
<corners android:radius="30dp" />
<padding
android:bottom="0dp"
android:left="0dp"
android:right="0dp"
android:top="0dp" />
</shape>
But when I apply it to my textView I get the shape but not the color. The color goes to default.
<Button
android:id="#+id/loginButton"
android:layout_width="249dp"
android:layout_height="45dp"
android:text="Login"
android:background="#drawable/rounded_blue"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="#+id/button_standard"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="#+id/button_standard"
app:layout_constraintTop_toBottomOf="#+id/edittext_password"
app:layout_constraintVertical_bias="0.086" />```
[This is what I get ][1]
[1]: https://i.stack.imgur.com/f5P8Y.png
The edges are rounded as I wanted, but I want to change the button color. Why won't the color translate over as well?T

Related

How to decrease the size of thumb in switch java/kotlin?

Hye there, I have created 4 SVG files 2 of them represent the thumb and 2 others represent the track as ON/OFF, and when I implemented them on the Switch button, I had no problem with the track but the thumb cirlce is forcing the track to take it size, for example if the size of the thumb = 20 then the track high should = 20 as well, and that make 2 problems, one, it distruct the shape of the svg, two, it is not showing as I want it to be, I want the thumb to be smaller and to fit inside the track like that:the shape I want to show
and here is my result:
this is what it show
this is the switch code:
<Switch
android:id="#+id/nightLight"
android:layout_centerHorizontal="true"
android:track="#drawable/night_light_track"
android:thumb="#drawable/night_light_thumb"
android:checked="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
this is the drawables:
night_light_thumb:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false">
<shape android:shape="oval">
<solid android:color="#color/C"/>
<size android:height="32dp" android:width="32dp"/>
</shape>
</item>
<item android:state_checked="true">
<shape android:shape="oval">
<solid android:color="#4E505F"/>
<size android:height="32dp" android:width="32dp"/>
</shape>
</item>
</selector>
night_light_track:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false"
android:drawable="#drawable/light_track"/>
<item android:state_checked="true"
android:drawable="#drawable/night_track"/>
</selector>
night_track:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="72dp"
android:height="32dp"
android:viewportWidth="72"
android:viewportHeight="32">
<group>
<clip-path
android:pathData="M56,0H16C7.2,0 0,7.2 0,16l0,0c0,8.8 7.2,16 16,16h40c8.8,0 16,-7.2 16,-16l0,0C72,7.2 64.8,0 56,0z"/>
<path
android:pathData="M56,0H16C7.2,0 0,7.2 0,16l0,0c0,8.8 7.2,16 16,16h40c8.8,0 16,-7.2 16,-16l0,0C72,7.2 64.8,0 56,0z"
android:fillColor="#2E2F38"/>
</group>
<group>
<clip-path
android:pathData="M56,0H16C7.2,0 0,7.2 0,16l0,0c0,8.8 7.2,16 16,16h40c8.8,0 16,-7.2 16,-16l0,0C72,7.2 64.8,0 56,0z"/>
<path
android:pathData="M16.5,10.2c-1.8,1.3 -3,3.4 -3,5.8c0,3.9 3.1,7 7,7c2.4,0 4.5,-1.2 5.8,-3c-0.3,0 -0.5,0 -0.8,0c-5,0 -9,-4 -9,-9C16.5,10.7 16.5,10.5 16.5,10.2zM11.5,16c0,-4 2.6,-7.3 6.1,-8.5l1.3,1.3c-0.2,0.7 -0.4,1.5 -0.4,2.3c0,3.9 3.1,7 7,7c0.8,0 1.5,-0.1 2.3,-0.4l1.3,1.3c-1.2,3.5 -4.6,6.1 -8.5,6.1C15.5,25 11.5,21 11.5,16z"
android:strokeAlpha="0.7"
android:fillColor="#4B5EFC"
android:fillType="evenOdd"
android:fillAlpha="0.7"/>
</group>
</vector>
light_track:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="72dp"
android:height="32dp"
android:viewportWidth="72"
android:viewportHeight="32">
<group>
<clip-path
android:pathData="M56,0H16C7.2,0 0,7.2 0,16l0,0c0,8.8 7.2,16 16,16h40c8.8,0 16,-7.2 16,-16l0,0C72,7.2 64.8,0 56,0z"/>
<path
android:pathData="M56,0H16C7.2,0 0,7.2 0,16l0,0c0,8.8 7.2,16 16,16h40c8.8,0 16,-7.2 16,-16l0,0C72,7.2 64.8,0 56,0z"
android:fillColor="#FFFFFF"/>
</group>
<group>
<clip-path
android:pathData="M56,0H16C7.2,0 0,7.2 0,16l0,0c0,8.8 7.2,16 16,16h40c8.8,0 16,-7.2 16,-16l0,0C72,7.2 64.8,0 56,0z"/>
<path
android:pathData="M51,6v1v2v1h2V9V7V6H51zM62,15h-1h-2h-1v2h1h2h1V15zM45,15h1v2h-1h-2h-1v-2h1H45zM51,22v1v2v1h2v-1v-2v-1H51zM46.3,23.1l-0.7,0.7l-1.4,-1.4l0.7,-0.7l1.4,-1.4l0.7,-0.7l1.4,1.4l-0.7,0.7L46.3,23.1zM56.9,12.5l0.7,-0.7l1.4,-1.4l0.7,-0.7l-1.4,-1.4l-0.7,0.7l-1.4,1.4l-0.7,0.7L56.9,12.5zM44.9,10.3l-0.7,-0.7l1.4,-1.4l0.7,0.7l1.4,1.4l0.7,0.7l-1.4,1.4l-0.7,-0.7L44.9,10.3zM55.5,20.9l0.7,0.7l1.4,1.4l0.7,0.7l1.4,-1.4l-0.7,-0.7l-1.4,-1.4l-0.7,-0.7L55.5,20.9zM54,16c0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2s0.9,2 2,2S54,17.1 54,16zM52,12c2.2,0 4,1.8 4,4s-1.8,4 -4,4s-4,-1.8 -4,-4S49.8,12 52,12z"
android:strokeAlpha="0.7"
android:fillColor="#4B5EFC"
android:fillType="evenOdd"
android:fillAlpha="0.7"/>
</group>
</vector>
What I did try is to change the size of the thumb same as the size of the track so it don't distruct the shape, so we don't stay having 2 problems, but still couldn't change the size of the thumb inside the track.
The switch size adjust as you have stated. To get around this, make a thumb that has two concentric circles inside a Layer List. The outer circle will be the size you want the track to be with a transparent color. The inner circle will be the same as the outer circle but will change color of the inner circle if that's what you want. This way, the thumb will appear to be inset inside the track but in actuality it will just have a transparent annular ring.
night_light_thumb.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false">
<layer-list>
<item>
<shape android:shape="oval">
<solid android:color="#android:color/transparent" />
<size android:width="32dp" android:height="32dp" />
</shape>
</item>
<item android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp">
<shape android:shape="oval">
<solid android:color="#color/C" />
<size android:width="24dp" android:height="24dp" />
</shape>
</item>
</layer-list>
</item>
<item android:state_checked="true">
<layer-list>
<item>
<shape android:shape="oval">
<solid android:color="#android:color/transparent" />
<size android:width="32dp" android:height="32dp" />
</shape>
</item>
<item android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp">
<shape android:shape="oval">
<solid android:color="#4E505F" />
<size android:width="24dp" android:height="24dp" />
</shape>
</item>
</layer-list>
</item>
</selector>
There are probably other ways to do this, but the idea is to build a transparent area around the visible thumb.
Update
Here is another way to do it using inset of the item attribute of layer list. This way involve less drawing and is shorter.
<selector>
<item android:state_checked="false">
<layer-list>
<item android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp">
<shape android:shape="oval">
<solid android:color="#android:color/holo_red_light" />
<size android:width="34dp" android:height="34dp" />
</shape>
</item>
</layer-list>
</item>
<item android:state_checked="true">
<layer-list>
<item android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp">
<shape android:shape="oval">
<solid android:color="#4E505F" />
<size android:width="34dp" android:height="34dp" />
</shape>
</item>
</layer-list>
</item>
</selector>

how to highlight selected item in recyclerview?

I am new to Material Card view and I want to change the card Foreground color programmatically when it is long pressed.
But the parameter to the setCardForegroundColor() method requires an instance of ColorStateList to be passed and I dont know how to create ColorStateList instance for my needs.
So can anyone please tell me how to use the ColorStateList to highlight cardview when it is long pressed ?
Instead of using the ColorStateList, to change colors of my RecyclerView items when they are pressed I use a drawable item in the background of the list item. Here's how I implement it:
List item example:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:background="#drawable/list_item_selector"
android:padding="8dp">
<!-- Above: android:background defines the list item Touch Selector to highlight row -->
<TextView
android:id="#+id/rating_name_textview"
style="#style/EditorFieldStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:textColor="#color/colorStatListItemText"
android:textSize="18sp" />
<TextView
android:id="#+id/rating_score_textview"
style="#style/EditorFieldStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:textColor="#color/colorStatListItemText"
android:textSize="18sp"
tools:text="100" />
</LinearLayout>
List item selector example:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Adding Touch Selectors for when items in the RecyclerView are touched -->
<!-- Three states: pressed, activated, and selected -->
<item android:drawable="#color/colorPrimaryLight" android:state_pressed="true" />
<item android:drawable="#color/colorPrimaryLight" android:state_activated="true" />
<item android:drawable="#color/colorPrimaryLight" android:state_selected="true" />
<!-- Define background color for Touch Selectors when item is not selected (light gray) -->
<item android:drawable="#color/colorBackgroundLight" />
</selector>
The list item references the list item selector and highlights the RecyclerView item appropriately, based on the colors I've defined in the color value file.

Automatically Increase layout height and width when view animate to bottom

I have three views(A, B, and C) which are stacked over one another. So when I click on a button the two views (B and C) animate from behind View A and scroll down to the bottom. Now my animation is working fine but the views B and C are extending out of the screen and my screen's height is not increasing.
Here is my layout.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true"
android:animateLayoutChanges="true">
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="#+id/trips_menu_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#color/colorBackgroundGrey">
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="#+id/layout_id_1"
android:layout_margin="8dp"
card_view:contentPadding="8dp"
card_view:cardElevation="16dp">
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="#+id/layout_id_2"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:layout_marginTop="40dp"
card_view:contentPadding="8dp"
card_view:cardElevation="2dp">
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="#+id/layout_id_3"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:layout_marginTop="40dp"
card_view:contentPadding="8dp"
android:visibility="invisible">
</android.support.v7.widget.CardView>
</RelativeLayout>
</ScrollView>
And my animation is simple translation Y animation.
Any suggestions as to how to increase the height of the layout as the two views animate to the bottom?

how to fill color in sld with the feature's attribute

for example:
here is a grass feature like this:
id,area, level
1,geometry, 24
2,geometry, 56
...
i wount to write a sld file that display color according to the attribute level, like this :
<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
<NamedLayer>
<Name>grass</Name>
<UserStyle>
<Name>grass</Name>
<Title>grass polygon</Title>
<Abstract>grass fill with level</Abstract>
<FeatureTypeStyle>
<Rule>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">rgb(**level**, 0, 255)</CssParameter>
</Fill>
<Stroke />
</PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
Have a look at the categorize and interpolate functions:
http://docs.geoserver.org/latest/en/user/styling/sld-tipstricks/transformation-func.html

ListActivity with bottom button

Hi I've created a listActivity which contain some rows of data and at the bottom of the screen (not the list) I've put a button.My problem is that in case that my list is full ,and therefore needs to be scrolled in order for the other rows to be seen,the button seems to be transparent and overlapping the last element of the list.So it doesn't seem pleasant to the eye.Do you have any suggestion of how to fix such problem?is there any way for my list to leave some space for the bottom button?I wouldn't like to implement it with footer view.I'll post the xml file so that you can have a clearer picture.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<DragNDrop.DragNDropListView
android:id="#+id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_weight="1" >
</DragNDrop.DragNDropListView>
<Button
android:id="#+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:alpha="1"
android:drawableLeft="#drawable/back"
android:text="Return" />
</RelativeLayout>
Try this
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<Button
android:id="#+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:alpha="1"
android:drawableLeft="#drawable/back"
android:text="Return" />
<DragNDrop.DragNDropListView
android:id="#+id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="#id/btn" >
</DragNDrop.DragNDropListView>
</RelativeLayout>
In a RelativeLayout, elements are placed on the top left corner by default, there's no need to specify that for the List
The simplest way is to use LinearLayout with orientation = vertical and ListView with layout_weight = 1 and Button below the ListView.
Put the button first in the relative layout and then set attribute
android:layout_above="#id/btn"
to list view. So the last elements will not be discovered by the button because the height of the list is max height minus button height.
change your xml as shown below
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<DragNDrop.DragNDropListView
android:id="#+id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_above="#id/btn"
android:layout_marginBottom="50dp"
android:layout_weight="1" >
</DragNDrop.DragNDropListView>
<Button
android:id="#+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:alpha="1"
android:drawableLeft="#drawable/back"
android:text="Return" />
</RelativeLayout>
Try this one, in this way you will have 10% for the button in the whole view, and 90% for the list view and the button will not overlap the last list element.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:weightSum="100" >
<ListView
android:id="#+id/android:list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="90" >
</ListView>
<Button
android:id="#+id/btn"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="10"
android:text="Return" />
</LinearLayout>

Resources