dev-notes/Android/activity.xml.md
2021-01-31 11:05:37 +01:00

7.4 KiB

Activity.xml

Resources

Colors, Style, Strings

These resorsces are located in app/src/main/res/values/<resource_type>.xml
@color/colorName -> access to color definition in colors.xml
@string/stringName -> access to string definition in strings.xml (useful for localization)
@style/styleName -> access to style definition in styles.xml

In colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--  app bar color  -->
    <color name="colorPrimary">#6200EE</color>
    <!--  status bar color  -->
    <color name="colorPrimaryDark">#3700B3</color>

    <color name="colorAccent">#03DAC5</color>

    <!--  other color definitions  -->
</resources>

In strings.xml:

<resources>
    <string name="app_name"> AppName </string>

    <!-- other strings definitions -->
</resources>

In styles.xml:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

View & View Group

A View contains a specific element of the layout.
A View Group or Layout is a container of Views.

<View settings/>

<ViewGroup settings>
    ...
</ViewGroup>

android:layout_width, android:layout_heigth:

  • fixed value (dp, sp)
  • match_parent
  • wrap_content

ViewGroups

RelativeLayout

The relative layout containing the view uses the value of these layout parameters to determine where to position the view on the screen.
If the view is not contained within a relative layout, these attributes are ignored.

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</RelativeLayout>

android:layout_above: Positions the bottom edge of this view above the given anchor view ID. android:layout_alignBaseline: Positions the baseline of this view on the baseline of the given anchor view ID. android:layout_alignBottom: Makes the bottom edge of this view match the bottom edge of the given anchor view ID. android:layout_alignEnd: Makes the end edge of this view match the end edge of the given anchor view ID. android:layout_alignLeft: Makes the left edge of this view match the left edge of the given anchor view ID. android:layout_alignParentBottom: If true, makes the bottom edge of this view match the bottom edge of the parent. android:layout_alignParentEnd: If true, makes the end edge of this view match the end edge of the parent. android:layout_alignParentLeft: If true, makes the left edge of this view match the left edge of the parent. android:layout_alignParentRight: If true, makes the right edge of this view match the right edge of the parent. android:layout_alignParentStart: If true, makes the start edge of this view match the start edge of the parent. android:layout_alignParentTop: If true, makes the top edge of this view match the top edge of the parent. android:layout_alignRight: Makes the right edge of this view match the right edge of the given anchor view ID. android:layout_alignStart: Makes the start edge of this view match the start edge of the given anchor view ID. android:layout_alignTop: Makes the top edge of this view match the top edge of the given anchor view ID. android:layout_alignWithParentIfMissing: If set to true, the parent will be used as the anchor when the anchor cannot be be found for layout_toLeftOf, layout_toRightOf, etc. android:layout_below: Positions the top edge of this view below the given anchor view ID. android:layout_centerHorizontal: If true, centers this child horizontally within its parent. android:layout_centerInParent: If true, centers this child horizontally and vertically within its parent. android:layout_centerVertical: If true, centers this child vertically within its parent. android:layout_toEndOf: Positions the start edge of this view to the end of the given anchor view ID. android:layout_toLeftOf: Positions the right edge of this view to the left of the given anchor view ID. android:layout_toRightOf: Positions the left edge of this view to the right of the given anchor view ID. android:layout_toStartOf: Positions the end edge of this view to the start of the given anchor view ID.

LinearLayout

Layout that arranges other views either horizontally in a single column or vertically in a single row.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">  <!-- or horizontal -->

</LinearLayout>

android:layout_weight: Indicates how much of the extra space in the LinearLayout is allocated to the view associated with these LayoutParams. android:layout_margin: Specifies extra space on the left, top, right and bottom sides of this view. android:layout_marginBottom: Specifies extra space on the bottom side of this view. android:layout_marginEnd: Specifies extra space on the end side of this view. android:layout_marginHorizontal: Specifies extra space on the left and right sides of this view. android:layout_marginLeft: Specifies extra space on the left side of this view. android:layout_marginRight: Specifies extra space on the right side of this view. android:layout_marginStart: Specifies extra space on the start side of this view. android:layout_marginTop: Specifies extra space on the top side of this view. android:layout_marginVertical: Specifies extra space on the top and bottom sides of this view. android:layout_height: Specifies the basic height of the view. android:layout_width: Specifies the basic width of the view.

Views

<!--ID is necessary for identification -->
<View
    android:id="@+id/uniquieId"
    android:layout_width="value"
    android:layout_height="value"
/>

TextView

To add ... to truncate a string:

<!-- maxLines + ellipsize works only in API 22+ -->
<TextView
    maxLines="n"
    ellipsize="end" />

ScrollView

The scroll view can only have one child. If the child is a layout than the layout can contain many elements.

<ScrollView
    android:id="@+id/uniquieId"
    android:layout_width="value"
    android:layout_height="value">
        <!-- single child -->
</ScrollView>

RecyclerView

List of items

In build.gradle:

dependencies {
    implementation "androidx.recyclerview:recyclerview:<version>"
    // For control over item selection of both touch and mouse driven selection
    implementation "androidx.recyclerview:recyclerview-selection:<version>"
}

In activity.xml:

<!-- VIewGroup for a list of items -->
<androidx.recycleview.widget.RecycleView
    android:id="@+id/uniquieId"
    android:layout_width="value"
    android:layout_height="value">

In recyclerViewItem.xml:

<!-- list item layout -->

WebView

<WebView
    android:id="@+id/uniquieId"
    android:layout_width="value"
    android:layout_height="value">

Constraints

If a view is anchored on both sides and the width/height is set to 0dp the view will expand to touch the elements to which is anchored.