Android --UI

220 阅读3分钟

SwitchCompat

修改默认的开关颜色

默认打开的颜色是红色的:

image.png

res/values/styles中添加以下代码

<style name="switchStyle" parent="Theme.AppCompat.Light">
    <!--开启时的颜色-->
    <item name="colorControlActivated">@color/blue_color</item>
    <!--关闭时的颜色-->
    <item name="colorSwitchThumbNormal">#8F8E8E</item>
    <!--关闭时的轨迹颜色-->
    <item name="android:colorForeground">#ACABA9</item>
</style>

在布局文件中使用,添加 app:theme="@style/switchStyle"即可

<androidx.appcompat.widget.SwitchCompat
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:theme="@style/switchStyle"
   />

效果如下:

image.png

RecyclerView

ViewPager + SmartRefreshLayout + RecyclerView 导致最后一个 Item 显示不全。

高度为 0dp ,使用 layout_constraintBottom_toBottoOf = " parent "。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">
 
    <include
        android:id="@+id/view"
        layout="@layout/include_toolbar_layout" />
 
    <net.lucode.hackware.magicindicator.MagicIndicator
        android:id="@+id/magic_indicator"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/xdp_32"
        android:layout_marginTop="@dimen/xdp_15"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/view" />
 
    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/magic_indicator" />
 
</android.support.constraint.ConstraintLayout>

TextView

设置字间距和行间距

通过xml设置

设置行间距:android:lineSpacingExtra

如:android:lineSpacingExtra="2dp"

设置行间距的倍数:android:lineSpacingMultiplier

如:android:lineSpacingMultiplier="1.2"

以上两个属性设置任一都可以修改TextView的行间距。

设置文本水平方向字体的缩放:android:textScaleX属性

这并不能真正的达到设置字间距的目的,查看源码解释如下:

Sets the extent by which text should be stretched horizontally.

设置水平方向文本的字间距:android:letterSpacing

如:android:letterSpacing="0.05"

通过代码设置

设置字间距

textView.setLetterSpacing(0.05);

Toast

显示异常

字和框不匹配 将Toast.makeText(Context,String,int)的第一个参数传入ApplicationContext就行了

  public void showShortToast(String text) {
        Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
    }

LinearLayout

内部控件间距设置

android:padding属性 可控制LinearLayout内部控件距离其他控件之间的距离

AndroidX支持

1.支持AndroidX,在项目根目录的gradle.properties中添加这两行

android.useAndroidX=true
android.enableJetifier=true

2、修改app目录下的build.gradle

将原来引用support.*的支持包全部替换为对应的androidx.*支持包

3、这个时候还需要再修改一下布局文件中,引用了support.*支持包的控件,改为androidx.*支持包引入

4、最后就是clear一下项目,再rebuild一下。。。应该就可以顺畅运行啦

RadioGroup实现点击的RadioButton项变色

drawable下新建selector类型的radio_selector.xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@color/colorSelect"/>//选中时颜色
    <item android:state_checked="false" android:drawable="@color/colorNoSelect"/>//未选中时颜色
    <item android:drawable="@color/colorNoSelect"/>//默认颜色

</selector>

布局中RadioGroup代码 在每个RadioButton中引用,刚才写的文件,android:background="@drawable/radio_selector"

给默认展示页面的对应的RadioButton中设置默认选中,android:cheched="true"

<RadioGroup
    android:id="@+id/radiogroup"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_alignParentBottom="true"
    android:layout_height="40dp">
    <RadioButton
        android:id="@+id/home_button"
        android:background="@drawable/radio_selector"
        android:gravity="center"
        android:layout_width="0dp"
        android:button="@null"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:text="首页"/>
    <RadioButton
        android:id="@+id/zixuan_button"
        android:background="@drawable/radio_selector"
        android:gravity="center"
        android:layout_width="0dp"
        android:button="@null"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:text="自选"/>
    <RadioButton
        android:id="@+id/hangqing_button"
        android:background="@drawable/radio_selector"
        android:gravity="center"
        android:layout_width="0dp"
        android:button="@null"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:text="行情"/>
    <RadioButton
        android:id="@+id/zixun_button"
        android:background="@drawable/radio_selector"
        android:checked="true"
        android:gravity="center"
        android:layout_width="0dp"
        android:button="@null"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:text="资讯"/>
    <RadioButton
        android:id="@+id/jiaoyi"
        android:background="@drawable/radio_selector"
        android:gravity="center"
        android:layout_width="0dp"
        android:button="@null"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:text="交易"/>
</RadioGroup>

Android app启动时黑屏或者白屏的原因及解决办法

1、产生原因 其实显示黑屏或者白屏实属正常,这是因为还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景。 2、解决办法 通过设置设置Style

(1)设置背景图Theme

通过设置一张背景图。 当程序启动时,首先显示这张背景图,避免出现黑屏

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:screenOrientation">portrait</item>
        <item name="android:windowBackground">>@mipmap/splash</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
</style>

(2)设置透明Theme

通过把样式设置为透明,程序启动后不会黑屏而是整个透明了,等到界面初始化完才一次性显示出来

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:screenOrientation">portrait</item>
    </style>

两者对比:

Theme1 程序启动快,界面先显示背景图,然后再刷新其他界面控件。给人刷新不同步感觉。 Theme2 给人程序启动慢感觉,界面一次性刷出来,刷新同步。

(3)修改AndroidManifest.xml

<application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true">
        <activity android:name=".MainActivity"
         android:theme="@style/AppTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    //......

</application>

3、常见的Theme主题

android:theme="@android:style/Theme.Dialog" //Activity显示为对话框模式

android:theme="@android:style/Theme.NoTitleBar" //不显示应用程序标题栏

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" //不显示应用程序标题栏,并全屏

android:theme="Theme.Light " //背景为白色

android:theme="Theme.Light.NoTitleBar" //白色背景并无标题栏

android:theme="Theme.Light.NoTitleBar.Fullscreen" //白色背景,无标题栏,全屏

android:theme="Theme.Black" //背景黑色

android:theme="Theme.Black.NoTitleBar" //黑色背景并无标题栏

android:theme="Theme.Black.NoTitleBar.Fullscreen" //黑色背景,无标题栏,全屏

android:theme="Theme.Wallpaper" //用系统桌面为应用程序背景

android:theme="Theme.Wallpaper.NoTitleBar" //用系统桌面为应用程序背景,且无标题栏

android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" //用系统桌面为应用程序背景,无标题栏,全屏

android:theme="Theme.Translucent" //透明背景

android:theme="Theme.Translucent.NoTitleBar" //透明背景并无标题

android:theme="Theme.Translucent.NoTitleBar.Fullscreen" //透明背景并无标题,全屏

android:theme="Theme.Panel " //面板风格显示

android:theme="Theme.Light.Panel" //平板风格显示

www.manongjc.com/article/122…