markdown UI基础知识 - 响应式布局

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown UI基础知识 - 响应式布局相关的知识,希望对你有一定的参考价值。

package com.example.android.boardingpass;

/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.example.android.boardingpass.databinding.ActivityMainBinding;
import com.example.android.boardingpass.utilities.FakeDataUtils;

import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.concurrent.TimeUnit;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding mBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        /*
         * DataBindUtil.setContentView replaces our normal call of setContent view.
         * DataBindingUtil also created our ActivityMainBinding that we will eventually use to
         * display all of our data.
         */
        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        BoardingPassInfo fakeBoardingInfo = FakeDataUtils.generateFakeBoardingPassInfo();
        displayBoardingPassInfo(fakeBoardingInfo);
    }

    private void displayBoardingPassInfo(BoardingPassInfo info) {

        mBinding.textViewPassengerName.setText(info.passengerName);
        // @@ Use the flightInfor attribute in mBinding below to get the appropiate text Views
        mBinding.flightInfo.textViewOriginAirport.setText(info.originCode);
        mBinding.flightInfo.textViewFlightCode.setText(info.flightCode);
        mBinding.flightInfo.textViewDestinationAirport.setText(info.destCode);

        SimpleDateFormat formatter = new SimpleDateFormat(getString(R.string.timeFormat), Locale.getDefault());
        String boardingTime = formatter.format(info.boardingTime);
        String departureTime = formatter.format(info.departureTime);
        String arrivalTime = formatter.format(info.arrivalTime);

        mBinding.textViewBoardingTime.setText(boardingTime);
        mBinding.textViewDepartureTime.setText(departureTime);
        mBinding.textViewArrivalTime.setText(arrivalTime);

        long totalMinutesUntilBoarding = info.getMinutesUntilBoarding();
        long hoursUntilBoarding = TimeUnit.MINUTES.toHours(totalMinutesUntilBoarding);
        long minutesLessHoursUntilBoarding =
                totalMinutesUntilBoarding - TimeUnit.HOURS.toMinutes(hoursUntilBoarding);

        String hoursAndMinutesUntilBoarding = getString(R.string.countDownFormat,
                hoursUntilBoarding,
                minutesLessHoursUntilBoarding);

        mBinding.textViewBoardingInCountdown.setText(hoursAndMinutesUntilBoarding);
        //  @@ Use the boardingInfo attribute in mBinding below to get the appropiate text Views
        mBinding.boardingInfo.textViewTerminal.setText(info.departureTerminal);
        mBinding.boardingInfo.textViewGate.setText(info.departureGate);
        mBinding.boardingInfo.textViewSeat.setText(info.seatNumber);
    }
}

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <ScrollView
        android:id="@+id/scroll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.constraint.ConstraintLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:text="@string/passenger_label"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/textViewPassengerLabel"
                android:textAppearance="@style/TextAppearance.AppCompat.Caption"
                android:letterSpacing="0.5"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:layout_marginStart="16dp"
                android:layout_marginTop="16dp"
                android:layout_marginLeft="16dp"
                tools:layout_constraintTop_creator="1"
                tools:layout_constraintLeft_creator="1" />


            <TextView
                tools:text="@string/passenger_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/textViewPassengerName"
                android:textAppearance="@style/TextAppearance.AppCompat.Display1"
                android:textColor="@color/colorPrimary"
                app:layout_constraintTop_toBottomOf="@+id/textViewPassengerLabel"
                android:layout_marginStart="16dp"
                app:layout_constraintLeft_toLeftOf="parent"
                android:layout_marginLeft="16dp"
                tools:layout_constraintTop_creator="1" />

<!--
        @@ Add an include tag in activity_main to include flightInfo in the right position
-->

            <include
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textViewPassengerName"
                android:layout_marginTop="16dp"
                android:id="@+id/flight_info"
                layout="@layout/flight_info"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                app:layout_constraintRight_toRightOf="parent" />


            <TextView
                android:id="@+id/textViewBoardingTimeLabel"
                android:text="@string/boarding_time_label"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="@style/TextAppearance.AppCompat.Caption"
                android:letterSpacing="0.3"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/flight_info"
                android:layout_marginTop="16dp"
                android:layout_marginStart="16dp"
                android:layout_marginLeft="16dp" />


            <TextView
                android:id="@+id/textViewBoardingTime"
                tools:text="@string/boarding_time"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="@style/TextAppearance.AppCompat.Display1"
                android:textColor="@android:color/black"
                app:layout_constraintLeft_toLeftOf="@+id/textViewBoardingTimeLabel"
                app:layout_constraintTop_toBottomOf="@+id/textViewBoardingTimeLabel" />


            <TextView
                android:id="@+id/textViewDepartureTimeLabel"
                android:text="@string/departure_time_label"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="@style/TextAppearance.AppCompat.Caption"
                android:letterSpacing="0.3"
                android:layout_marginTop="8dp"
                app:layout_constraintTop_toBottomOf="@+id/textViewBoardingTime"
                app:layout_constraintLeft_toLeftOf="@+id/textViewBoardingTime" />


            <TextView
                android:id="@+id/textViewDepartureTime"
                tools:text="@string/departure_time"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="@style/TextAppearance.AppCompat.Headline"
                android:textColor="@color/colorGood"
                app:layout_constraintLeft_toLeftOf="@+id/textViewDepartureTimeLabel"
                app:layout_constraintTop_toBottomOf="@+id/textViewDepartureTimeLabel" />


            <TextView
                android:id="@+id/textViewBoardingInTimeLabel"
                android:text="@string/boarding_in_label"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="@style/TextAppearance.AppCompat.Caption"
                android:letterSpacing="0.3"
                android:layout_marginEnd="40dp"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/flight_info"
                android:layout_marginTop="16dp"
                android:layout_marginRight="40dp" />


            <TextView
                android:id="@+id/textViewBoardingInCountdown"
                tools:text="@string/boarding_in_time"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="@style/TextAppearance.AppCompat.Display1"
                android:textColor="@color/colorBad"
                app:layout_constraintLeft_toLeftOf="@+id/textViewBoardingInTimeLabel"
                app:layout_constraintTop_toBottomOf="@+id/textViewBoardingInTimeLabel" />


            <TextView
                android:id="@+id/textViewArrivalTimeLabel"
                android:text="@string/arrival_time_label"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="@style/TextAppearance.AppCompat.Caption"
                android:letterSpacing="0.3"
                app:layout_constraintTop_toBottomOf="@+id/textViewBoardingInCountdown"
                app:layout_constraintLeft_toLeftOf="@+id/textViewBoardingInCountdown"
                android:layout_marginTop="8dp"/>


            <TextView
                android:id="@+id/textViewArrivalTime"
                tools:text="@string/arrival_time"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="@style/TextAppearance.AppCompat.Headline"
                android:textColor="@color/colorGood"
                app:layout_constraintLeft_toLeftOf="@+id/textViewArrivalTimeLabel"
                app:layout_constraintTop_toBottomOf="@+id/textViewArrivalTimeLabel" />

<!--
        @@ Add an include tag in activity_main to include boardingInfo in the right position
-->
            <include
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textViewArrivalTime"
                android:layout_marginTop="16dp"
                android:id="@+id/boarding_info"
                layout="@layout/boarding_info"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                app:layout_constraintRight_toRightOf="parent"
                android:layout_marginStart="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginEnd="16dp"
                android:layout_marginRight="16dp"/>


            <ImageView
                android:layout_width="100dp"
                android:layout_height="100dp"
                app:srcCompat="@mipmap/barcode"
                android:id="@+id/barcode"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/boarding_info"
                android:layout_marginTop="16dp"
                />

        </android.support.constraint.ConstraintLayout>
    </ScrollView>
</layout>
<?xml version="1.0" encoding="utf-8"?>

<!-- @@
        // Create a new xml file called flight_info in the layout directory
        // Move all Views in the flight information section from activity_main to flight_info
-->

<layout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/leftRectangle"
        android:layout_width="60dp"
        android:layout_height="80dp"
        android:background="@drawable/shape_rectangle_stroke"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_marginLeft="32dp"
        android:layout_marginTop="16dp"
        android:layout_marginStart="32dp" />

    <ImageView
        android:id="@+id/divider"
        android:background="@color/colorPrimaryLight"
        android:layout_height="1dp"
        android:layout_width="0dp"
        app:layout_constraintLeft_toRightOf="@+id/leftRectangle"
        app:layout_constraintRight_toLeftOf="@+id/rightRectangle"
        app:layout_constraintTop_toBottomOf="@+id/rightRectangle"
        app:layout_constraintBottom_toTopOf="@+id/rightRectangle"
        app:layout_constraintHorizontal_bias="0.0"/>

    <ImageView
        android:id="@+id/rightRectangle"
        android:layout_width="60dp"
        android:layout_height="80dp"
        android:background="@drawable/shape_rectangle_stroke"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginRight="32dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="32dp" />

    <TextView
        tools:text="@string/origin_code"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textViewOriginAirport"
        android:textAppearance="@style/TextAppearance.AppCompat.Headline"
        app:layout_constraintBottom_toBottomOf="@+id/divider"
        app:layout_constraintRight_toRightOf="@+id/leftRectangle"
        app:layout_constraintTop_toBottomOf="@+id/divider"
        app:layout_constraintLeft_toLeftOf="@+id/leftRectangle" />

    <TextView
        tools:text="@string/destination_code"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textViewDestinationAirport"
        android:textAppearance="@style/TextAppearance.AppCompat.Headline"
        app:layout_constraintBottom_toBottomOf="@+id/divider"
        app:layout_constraintRight_toRightOf="@+id/rightRectangle"
        app:layout_constraintTop_toBottomOf="@+id/divider"
        app:layout_constraintLeft_toLeftOf="@+id/rightRectangle" />

    <ImageView
        android:id="@+id/imagePlane"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:background="@drawable/art_plane"
        app:layout_constraintBottom_toTopOf="@+id/divider"
        app:layout_constraintLeft_toRightOf="@+id/leftRectangle"
        app:layout_constraintRight_toLeftOf="@+id/rightRectangle"
        android:layout_marginBottom="16dp"
        />

    <TextView
        android:id="@+id/textViewFlightCode"
        tools:text="@string/flight_code"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="@style/TextAppearance.AppCompat.Display1"
        android:textColor="@color/colorPrimary"

        app:layout_constraintTop_toTopOf="@+id/divider"
        app:layout_constraintLeft_toRightOf="@+id/leftRectangle"
        app:layout_constraintRight_toLeftOf="@+id/rightRectangle"
        android:layout_marginTop="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp" />


</android.support.constraint.ConstraintLayout>
    </layout>
<?xml version="1.0" encoding="utf-8"?>

<!-- @@
        // Create a new xml file called boarding_info in the layout directory
        // Move all Views in the boarding information table from activity_main to boarding_info
-->

<layout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/tableHeaderImage"
        android:background="@color/colorPrimaryLight"
        android:layout_height="24dp"
        android:layout_width="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginTop="32dp"
        app:layout_constraintTop_toBottomOf="@+id/textViewDepartureTime"
        app:layout_constraintHorizontal_bias="0.33" />

    <ImageView
        android:id="@+id/tableImage"
        android:background="@color/colorPrimary"
        android:layout_height="0dp"
        android:layout_width="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tableHeaderImage"
        app:layout_constraintBottom_toBottomOf="@+id/textViewTerminal"/>



    <TextView
        android:id="@+id/textViewTerminalLabel"
        android:text="@string/terminal_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="@style/TextAppearance.AppCompat.Caption"
        android:textColor="@android:color/black"
        app:layout_constraintBottom_toBottomOf="@+id/tableHeaderImage"
        app:layout_constraintLeft_toLeftOf="@+id/textViewTerminal"
        app:layout_constraintRight_toRightOf="@+id/textViewTerminal"

        app:layout_constraintTop_toTopOf="@+id/tableHeaderImage" />

    <TextView
        android:id="@+id/textViewGateLabel"
        android:text="@string/gate_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="@style/TextAppearance.AppCompat.Caption"
        android:textColor="@android:color/black"
        app:layout_constraintBottom_toBottomOf="@+id/tableHeaderImage"
        app:layout_constraintLeft_toLeftOf="@+id/textViewGate"
        app:layout_constraintRight_toRightOf="@+id/textViewGate"
        app:layout_constraintTop_toTopOf="@+id/tableHeaderImage"
        />

    <TextView
        android:id="@+id/textViewSeatLabel"
        android:text="@string/seat_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="@style/TextAppearance.AppCompat.Caption"
        android:textColor="@android:color/black"
        app:layout_constraintBottom_toBottomOf="@+id/tableHeaderImage"
        app:layout_constraintRight_toRightOf="@+id/textViewSeat"
        app:layout_constraintLeft_toLeftOf="@+id/textViewSeat"
        app:layout_constraintTop_toTopOf="@+id/tableHeaderImage"
        />

    <TextView
        tools:text="@string/terminal"
        android:layout_width="120dp"
        android:layout_height="wrap_content"
        android:id="@+id/textViewTerminal"
        app:layout_constraintTop_toTopOf="@+id/tableImage"
        app:layout_constraintLeft_toLeftOf="@+id/tableImage"
        app:layout_constraintRight_toRightOf="@+id/tableImage"
        android:textAppearance="@style/TextAppearance.AppCompat.Display2"
        android:textColor="@android:color/white"
        app:layout_constraintHorizontal_bias="0.0"
        android:textAlignment="center" />


    <TextView
        android:id="@+id/textViewGate"
        tools:text="@string/gate"
        android:layout_width="120dp"
        android:layout_height="0dp"
        app:layout_constraintLeft_toLeftOf="@+id/tableImage"
        app:layout_constraintRight_toRightOf="@+id/tableImage"
        android:textAppearance="@style/TextAppearance.AppCompat.Display2"
        android:textColor="@android:color/white"
        android:textAlignment="center"
        app:layout_constraintTop_toBottomOf="@+id/tableHeaderImage"
        app:layout_constraintBottom_toBottomOf="@+id/tableImage"/>

    <TextView
        android:id="@+id/textViewSeat"
        tools:text="@string/seat"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="@+id/tableImage"
        app:layout_constraintLeft_toLeftOf="@+id/tableImage"
        app:layout_constraintRight_toRightOf="@+id/tableImage"
        android:textAppearance="@style/TextAppearance.AppCompat.Display2"
        android:textColor="@android:color/white"
        app:layout_constraintHorizontal_bias="1.0"
        android:textAlignment="center"
        android:layout_width="120dp" />

</android.support.constraint.ConstraintLayout>

</layout>
## You can create a entirely new layout just for the landscape mode.

Create a new folder called layout-land inside the res directory. 
Do not use the Android Studio to create this folder, use your fiile explorer.

res -> layout-land

Copy the activity_main.xml file inside the layout-land folder.
Make all the modifications in this file.

To make your code reusable, create mini layouts and use them 
inside both the default and the landscape xml. This will reduce duplicity.

以上是关于markdown UI基础知识 - 响应式布局的主要内容,如果未能解决你的问题,请参考以下文章

React Material-ui 响应式布局

2015-2016前端知识体系

你不能不知道的前端知识体系

markdown UI基础知识 - 约束布局

SAP UI5 Form 表单的 Responsive Grid Layout 布局中的 breakpoint

响应式布局的开发基础知识