欢迎页由一下四个部分组成,没有IP设置可以忽略IP设置按钮
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/tvInternet" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".activity.WelcomeActivity"> <androidx.viewpager.widget.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"> </androidx.viewpager.widget.ViewPager> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="网络配置" android:textColor="#fff" android:textSize="24dp" android:layout_centerHorizontal="true" android:layout_above="@id/btnIndex" /> <Button android:id="@+id/btnIndex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="btnIndexClick" android:text="进入主页" android:layout_centerHorizontal="true" android:layout_above="@id/ll_welcome" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:layout_marginBottom="50dp" android:id="@+id/ll_welcome" > <RadioGroup android:id="@+id/rdGroup" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" > <RadioButton android:id="@+id/rd1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/rd2" android:layout_width="match_parent" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/rd3" android:layout_width="match_parent" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/rd4" android:layout_width="match_parent" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/rd5" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RadioGroup> </LinearLayout> </RelativeLayout>
由两部分组成:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:text="IP地址:" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> <EditText android:id="@+id/txtIp" android:hint="192.168.1.1" android:layout_width="300dp" android:layout_height="wrap_content"> </EditText> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:text="端口号:" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> <EditText android:id="@+id/txtPort" android:hint="8080" android:layout_width="300dp" android:layout_height="wrap_content"> </EditText> </LinearLayout> </LinearLayout>
import android.app.Application; import android.content.Context; /** * 此类用于创建上下文对象 */ public class App extends Application { public static Context context; @Override public void onCreate() { super.onCreate(); context=getApplicationContext(); } }
import android.content.SharedPreferences; import com.neu.App; /** * 此类用于操作SharedPreferences存储对象 */ public class SpHelper { // 存储配置的sp文件名 private final static String FILE_NAME="config"; /** * 获得config对象里面的指定参数 * @param name 参数名 * @return 参数 */ public static String getString(String name){ return getStSp().getString(name,""); } /** * 设置ShardPreferences * @param name key值 * @param value value值 */ public static void setString(String name,String value){ SharedPreferences sp=getStSp(); SharedPreferences.Editor editor=getStSp().edit(); editor.putString(name,value); editor.commit(); } /** * 获得SharedPreferences 对象 * @return 获得配置的对象如ID地址端口号 */ private static SharedPreferences getStSp(){ return App.context.getSharedPreferences(FILE_NAME,App.context.MODE_PRIVATE); } }
import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; import com.neu.App; import com.neu.MainActivity; import com.neu.R; import com.neu.util.SpHelper; import java.util.regex.Matcher; import java.util.regex.Pattern; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; public class WelcomeActivity extends AppCompatActivity { // 滑动ViewPager private ViewPager viewPager; // 网络配置文本对象 private TextView textView; // 单选按钮组 private RadioGroup rdGroup; // 单选按钮列表 private int[] rbs = {R.id.rd1, R.id.rd2, R.id.rd3, R.id.rd4, R.id.rd5}; // 进入首页按钮 private Button btnIndex; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_welcome); // 获得名为first的参数 String first=SpHelper.getString("first"); // 比较是否是第一次进入 if("first".equals(first)){ // SharedPreferences里面config中包含first参数 Intent intent=new Intent(this,MainActivity.class); // 直接进入主页 startActivity(intent); // 销毁当前页 finish(); } // 初始化当前轮播图页 initView(); } // 这里写你要跳转的首页 public void btnIndexClick(View view) { Intent intent = new Intent(this, MainActivity.class); startActivity(intent); } private void initView() { viewPager = (ViewPager) findViewById(R.id.viewPager); textView = (TextView) findViewById(R.id.textView); rdGroup = (RadioGroup) findViewById(R.id.rdGroup); viewPager.setAdapter(new PagerAdapter() { // 图片列表 private int[] imgs = {R.drawable.a1, R.drawable.a2, R.drawable.a3, R.drawable.a4, R.drawable.a5}; /** * 重写方法 加载每个页面出现的对象 * @param container 父布局 * @param position 当前位置 * @return 对象 */ @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { // 创建图片 ImageView pic = new ImageView(getApplicationContext()); // 设置类型——居中显示? pic.setScaleType(ImageView.ScaleType.CENTER_CROP); // 设置图片 pic.setImageResource(imgs[position]); // 添加进容器对象 container.addView(pic); return pic; } /** * 销毁 * @param container * @param position * @param object */ @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { // 删除创建的对象 container.removeView((View) object); } @Override public int getCount() { return imgs.length; } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return object == view; } }); // 添加监听 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // 单选按钮选中项改变 rdGroup.check(rbs[position]); if (position + 1 == 5) { // 最后一页显示设置对象 textView.setVisibility(View.VISIBLE); btnIndex.setVisibility(View.VISIBLE); }else{ // 前面几页隐藏设置对象 textView.setVisibility(View.GONE); btnIndex.setVisibility(View.GONE); } } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }); btnIndex = (Button) findViewById(R.id.btnIndex); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setIp(); } }); } //设置IP private void setIp() { // 创建对话框 AlertDialog.Builder builder=new AlertDialog.Builder(this); builder.setTitle("设置IP和端口号"); // 创建IP输入view View view=getLayoutInflater().inflate(R.layout.dialog_ip,null); // 获得输入框对象 final EditText txtIp=view.findViewById(R.id.txtIp); final EditText txtPort=view.findViewById(R.id.txtPort); // 设置view builder.setView(view); // 设置保存按钮 builder.setPositiveButton("保存",null); // 创建对话框 final AlertDialog dialog=builder.create(); // 显示对话框 dialog.show(); // 获得保存按钮对象,设置监听 dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 判断IP地址是否合法 if(!isboolIp(txtIp.getText().toString())){ Toast.makeText(App.context,"IP格式错误",Toast.LENGTH_LONG).show(); // 错误重新输入,聚焦 txtIp.setFocusable(true); }else{ if("".equals(txtPort.getText().toString())){ Toast.makeText(App.context,"端口不能为空",Toast.LENGTH_LONG).show(); txtIp.setFocusable(false); // 端口输入框聚焦 txtPort.setFocusable(true); }else{ //保存http://+ip+:+port String url="http://"+txtIp.getText().toString()+":"+txtPort.getText().toString(); // 存入 SharedPreferences SpHelper.setString("url",url); Log.d("TAG", "onClick: "+SpHelper.getString("url")); //设置第一次已完成,后面不在弹出welcome SpHelper.setString("first","first"); //关闭dialog dialog.dismiss(); } } } }); } // 判断是否是IP地址 private boolean isboolIp(String ipAddress) { // 正则匹配是否是ip地址 String ip = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"; // 添加匹配器 Pattern pattern = Pattern.compile(ip); // 正则匹配IP Matcher matcher = pattern.matcher(ipAddress); // 返回匹配的结果 return matcher.matches(); } }