AndroidAutoSize L'édition ultime de la solution d'adaptation d'écran Toutiao d'aujourd'hui

AndroidAutoSize

Le cadre d'adaptation d'écran AndroidAutoSize est optimisé selon le schéma d'adaptation d'écran Toutiao.

Configurer les dépendances distantes tierces

 

<!--私有依赖-->
implementation 'me.jessyan:autosize:1.1.2'
<!--共有依赖-->
api 'me.jessyan:autosize:1.1.2'

Utilisation et présentation des fonctions

AndroidAutoSize est très simple à utiliser, il vous suffit de renseigner la taille du dessin de conception pour accéder au projet;

 

<!--适配海博TV-->
<manifest>
    <application>            
        <meta-data
            android:name="design_width_in_dp"
            android:value="540"/>
        <meta-data
            android:name="design_height_in_dp"
            android:value="960"/>           
     </application>           
</manifest>

Vous avez le choix entre deux types d'unités de mise en page, l'une est l'unité principale (dp, sp) et l'autre est l'unité secondaire (pt, in, mm)

  • Unité principale : utilisez dp et sp comme unité de mise en page, ce qui est le moins intrusif et affectera les effets de mise en page d'autres pages de bibliothèque tierces, des contrôles de bibliothèque tiers et des contrôles système. Cependant, AndroidAutoSize utilise également cette fonctionnalité pour utiliser ExternalAdaptManager pour réaliser sans modifier le code source de la bibliothèque tierce S'adapter à la fonction de la bibliothèque tierce dans le cas de

  • Sous-unité : utilisez pt, in, mm comme unité de mise en page, ce qui est très intrusif et prend bien en charge les anciens projets. Cela n'affectera pas les effets de mise en page des autres pages de bibliothèque tripartite, des contrôles de bibliothèque tripartite et des contrôles système. La densité peut être complètement blindé et modifié Tous les problèmes inconnus et connus causés par cela, mais de cette manière AndroidAutoSize ne peut pas s'adapter à la bibliothèque tierce

Lors de l'utilisation de l'unité principale, design_width_in_dpet design_height_in_dpl'unité doit être dp, la formule dp = px / (DPI / 160)sera convertie en taille de dimension dp px, si elle ne peut pas trouver l'appareil directement en DPI, la taille px serait divisée par 2 ou 3.

Accès au cadre terminé

Il s'agit de la fonction de base d'AndroidAutoSize. L'utilisation d'AndroidAutoSize est terminée. Seule l'étape ci-dessus est nécessaire pour vous aider à accéder à AndroidAutoSize de la manière la plus simple.

Utilisation avancée

La taille de conception renseignée dans AndroidManifest.xml est la taille de dessin de conception globale de l'ensemble du projet. Cependant, si certaines pages d'activité sont dues à certaines raisons, la taille de dessin de conception de cette page est différente de la taille de dessin de conception renseignée dans AndroidManifest.xml Comment faire? Vous pouvez faire en sorte que l'activité de cette page implémente CustomAdapt, et la première méthode de l'interface CustomAdapt peut modifier la taille de conception de la page en cours.

  • Activité personnalisée

 

public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt {

     /**
     * 是否按照宽度进行等比例适配 (为了保证在高宽比不同的屏幕上也能正常适配, 所以只能在宽度和高度之中选择一个作为基准进行适配)
     *
     * @return {@code true} 为按照宽度进行适配, {@code false} 为按照高度进行适配
     */
    @Override
    public boolean isBaseOnWidth() {
        return false;
    }

     /**
     * 设计图尺寸为 1080px * 1920px, 高换算成 dp 为 960 (1920px / 2 = 960dp)
     * <p>
     * 返回的设计尺寸, 单位 dp
     * {@link #getSizeInDp} 须配合 {@link #isBaseOnWidth()} 使用, 规则如下:
     * 如果 {@link #isBaseOnWidth()} 返回 {@code true}, {@link #getSizeInDp} 则应该返回设计图的总宽度
     * 如果 {@link #isBaseOnWidth()} 返回 {@code false}, {@link #getSizeInDp} 则应该返回设计图的总高度
     * 如果您不需要自定义设计图上的设计尺寸, 想继续使用在 AndroidManifest 中填写的设计图尺寸, {@link #getSizeInDp} 则返回 {@code 0}
     *
     * @return 单位 dp
     */
    @Override
    public float getSizeInDp() {
        return 667;
    }
}

Si une activité souhaite renoncer à l'adaptation, laissez cette activité implémenter l'interface CancelAdapt. Par exemple, si vous modifiez la densité pour affecter la mise en page de certaines pages Activité dans l'ancien projet, vous pouvez laisser cette activité implémenter l'interface CancelAdapt.

 

public class CancelAdaptActivity extends AppCompatActivity implements CancelAdapt {

}
  • Fragment personnalisé

La méthode de personnalisation de Fragment est la même que celle de Activity, sauf que vous devez activer la prise en charge de Fragment lorsque l'application est initialisée avant utilisation.

 

AutoSizeConfig.getInstance().setCustomFragment(true);
  • Mettre en œuvre CustomAdapt

 

public class CustomAdaptFragment extends Fragment implements CustomAdapt {

    @Override
    public boolean isBaseOnWidth() {
        return false;
    }

    @Override
    public float getSizeInDp() {
        return 667;
    }
}
  • Mettre en œuvre CancelAdapt

 

public class CancelAdaptFragment extends Fragment implements CancelAdapt {

}

Solution universelle

Dans tous les cas, s'il y a un échec d'adaptation soudain ou une adaptation anormale de la mise en page initialement adaptée, il vous suffit de réécrire la méthode getResources () de l'activité. Si la boîte de dialogue, PopupWindow et d'autres contrôles ont un échec d'adaptation ou une adaptation exception, appelez également AutoSize # autoConvertDensity () avant chaque show ().

La solution vient de: Blankj

 

@Override
public Resources getResources() {
    //需要升级到 v1.1.2 及以上版本才能使用 AutoSizeCompat
    AutoSizeCompat.autoConvertDensityOfGlobal((super.getResources());//如果没有自定义需求用这个方法
    AutoSizeCompat.autoConvertDensity((super.getResources(), 667, false);//如果有自定义需求就用这个方法
    return super.getResources();
}

 

 

Je suppose que tu aimes

Origine blog.csdn.net/guodashen007/article/details/105205691
conseillé
Classement