在github上看到好多炫酷的组件,捣腾了半天终于知道要怎么用了5555,记录一下,免得以后忘记了
先以这个简单的Toast样式为例 Toasty 下载 ,然后代码下载到本地。
在github上教的方法都是类似这样:
在root build.gradle file中添加
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
在module’s build.gradle file中添加
dependencies {
...
implementation 'com.github.GrenderG:Toasty:1.5.2'
}
but 尝试了几遍没有成功,然后又杂七杂八的尝试去maven仓库下载arr文件然后导入(这个方法也可以,但是有一些github上的项目并没有上传到marven,感觉并不是万能的),也尝试了导入modules, 也不行。。。
于是!尝试简单粗暴的用CV大法+一些小tricks,居然成了!!
anyway ,下面就进入正题
1️⃣
在本地新建一个空project。
2️⃣
将第三方代码下载到本地,然后打开瞅瞅,有两个大文件夹(里面装的都是核心代码,看着就很重要啦哈哈哈) app
先不管,我们先复制toasty
这个目录
3️⃣
然后把toasty
复制到项目的根目录下。
这时候呢,toasty是普通目录的感觉(我们希望它是一个library的形式),而且猩红的报错一大片,莫慌,进入下一步。
4️⃣
在setting.gradle中,include 后面添加,':toasty'
, 最后点击Sync now进行同步。
这时候就会发现toasty变为library的形式啦
然后运行项目,这时呢一定会报错,报错的原因就是gradle项目的配置问题。改的小技巧就是把toasty目录下的build.gradle文件报错的地方改成与app目录下build.gradle文件一致。(主要就是版本号不一致,或者有些报错的地方直接删除对应的那一行)
比如说我的就改成这样了:
apply plugin: 'com.android.library'
group = 'com.github.GrenderG'
version = 1
android {
compileSdkVersion 32
defaultConfig {
minSdkVersion 21
targetSdkVersion 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
}
5️⃣
上面的那一步跑通后,然后就可以丰富新项目的app内容啦
框出来的文件可以参考github上app目录下的对应文件编写
例如我的MainActivity.java 文件
package com.example.myapplication1;
import static android.graphics.Typeface.BOLD_ITALIC;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.StyleSpan;
import android.view.View;
import es.dmoral.toasty.Toasty;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button_error_toast).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toasty.error(MainActivity.this, R.string.error_message, Toasty.LENGTH_SHORT, true).show();
}
});
findViewById(R.id.button_success_toast).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toasty.success(MainActivity.this, R.string.success_message, Toasty.LENGTH_SHORT, true).show();
}
});
findViewById(R.id.button_info_toast).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toasty.info(MainActivity.this, R.string.info_message, Toasty.LENGTH_SHORT, true).show();
}
});
findViewById(R.id.button_warning_toast).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toasty.warning(MainActivity.this, R.string.warning_message, Toasty.LENGTH_SHORT, true).show();
}
});
findViewById(R.id.button_normal_toast_wo_icon).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toasty.normal(MainActivity.this, R.string.normal_message_without_icon).show();
}
});
findViewById(R.id.button_normal_toast_w_icon).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Drawable icon = getResources().getDrawable(R.drawable.ic_launcher_background);
Toasty.normal(MainActivity.this, R.string.normal_message_with_icon, icon).show();
}
});
findViewById(R.id.button_info_toast_with_formatting).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toasty.info(MainActivity.this, getFormattedMessage()).show();
}
});
findViewById(R.id.button_custom_config).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toasty.Config.getInstance()
.setToastTypeface(Typeface.createFromAsset(getAssets(), "PCap Terminal.otf"))
.allowQueue(false)
.apply();
Toasty.custom(MainActivity.this, R.string.custom_message, getResources().getDrawable(R.drawable.ic_launcher_background),
android.R.color.black, android.R.color.holo_green_light, Toasty.LENGTH_SHORT, true, true).show();
Toasty.Config.reset(); // Use this if you want to use the configuration above only once
}
});
}
private CharSequence getFormattedMessage() {
final String prefix = "Formatted ";
final String highlight = "bold italic";
final String suffix = " text";
SpannableStringBuilder ssb = new SpannableStringBuilder(prefix).append(highlight).append(suffix);
int prefixLen = prefix.length();
ssb.setSpan(new StyleSpan(BOLD_ITALIC),
prefixLen, prefixLen + highlight.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return ssb;
}
}
activity_main.xml文件如下:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<Button
android:text="@string/error_toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/button_error_toast"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:text="@string/success_toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button_error_toast"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/button_success_toast"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:text="@string/info_toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button_success_toast"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/button_info_toast"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:text="@string/info_toast_with_formatting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/button_info_toast"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/button_info_toast_with_formatting"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:id="@+id/button_warning_toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button_info_toast_with_formatting"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:text="@string/warning_toast" />
<Button
android:text="@string/normal_toast_without_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button_warning_toast"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/button_normal_toast_wo_icon"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:text="@string/normal_toast_with_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button_normal_toast_wo_icon"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/button_normal_toast_w_icon"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:text="@string/custom_configuration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button_normal_toast_w_icon"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/button_custom_config"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
RelativeLayout>
ScrollView>
这个过程还算流畅,然后运行代码。(可能会有一些小bug, 一般是类没有引入,alt+enter快捷引入即可)