十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
你可以使用以下代码代替你的 ACTION_CALL(推荐):
创新互联是一家专业提供西盟企业网站建设,专注与成都网站制作、网站建设、H5响应式网站、小程序制作等业务。10年已为西盟众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
Intent intent = new Intent(Intent.ACTION_DIAL);
也可以参考这里,在 manifest 中添加
android.permission.PHONE_CALL
的权限,并且在拨打电话之前检验权限:
//检查是否已经给了权限
int checkpermission= ContextCompat.checkSelfPermission(getApplicationContext(),Manifest.permission.ACCESS_FINE_LOCATION);
if(checkpermission!=PackageManager.PERMISSION_GRANTED){ //没有给权限,申请
//参数分别是当前活动,权限字符串数组,requestcode
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
// 暂时使用 DIAL 代替 CALL
Intent intent = new Intent(Intent.PHONE_DIAL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
} else {
// 直接使用 CALL
Intent intent = new Intent(Intent.PHONE_CALL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
}
然后添加一个方法:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//grantResults数组与权限字符串数组对应,里面存放权限申请结果
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
// 放已授权的处理方法
}else{
// 放拒绝授权的处理方法
Toast.makeText(MainActivity.this,"拒绝授权",Toast.LENGTH_SHORT).show();
}
}
参考:CSDN
Android在xml文件中可使用include包含其他定义好的布局, 可以将多处用到的布局单独出来,然后用include包含进来,这种包含方法相当于把原来布局的一部分代码独立出来,供大家共同使用,也就相当于面向对向中的类的概念差不多。下面我们逐步讲解include的作用。
先看下我们要实现的整体界面:
一、未使用Include时
通常情况下,我们直接就能写出布局代码,下面是所使用的XML代码:
[html] view plaincopy
?xml version="1.0" encoding="utf-8"?
LinearLayout xmlns:android=""
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
!-- 第一部分 --
TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ff0000"
android:text="第一个BTN" /
Button
android:id="@+id/mybutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=" One Button " /
!-- 第二部分 --
TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#00ff00"
android:text="第二个BTN" /
Button
android:id="@+id/mybutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=" Second Button " /
!-- 最后的按钮 --
Button
android:id="@+id/another"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Another Button " /
/LinearLayout
这段代码理解起来一点难度没有,就是几个TextView和几个Button,下面我们用include把这段代码给分割成几个文件,并完成相同的效果;
二、使用Include时
1、先将上面代码标记有“第一部分”的,代码段分离成一个文件(sublayout1.xml);
[html] view plaincopy
?xml version="1.0" encoding="utf-8"?
LinearLayout xmlns:android=""
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#505050"
android:orientation="vertical"
TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ff0000"
android:text="第一个BTN" /
Button
android:id="@+id/mybutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=" One Button " /
/LinearLayout
2、再将标记有“第二部分”的代码段,分离成第二个文件(sublayout2.xml):
[html] view plaincopy
?xml version="1.0" encoding="utf-8"?
LinearLayout xmlns:android=""
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#00ff00"
android:text="第二个BTN" /
Button
android:id="@+id/mybutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=" Second Button " /
/LinearLayout
3、主文件中使用include,将上面两个文件包含进去(activity_main.xml);
[html] view plaincopy
?xml version="1.0" encoding="utf-8"?
LinearLayout xmlns:android=""
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
include
android:id="@+id/main1"
layout="@layout/sublayout1" /
include
android:id="@+id/main2"
layout="@layout/sublayout2" /
Button
android:id="@+id/another"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Another Button " /
/LinearLayout
这样就实现了相同的效果,这里可以看到,include并没有其它的功能,只是把一个XML布局引入进来当做自己的布局,跟直接把引用的这段代码写在include处的效果是一样的。
你是想在activity的代码里写linearlayout么?
1、你可以在代码里面创建一个LinearLayout (比如 lineLayout1 ),然后针对这个变量进行设置
2、然后你需要通过findViewById()的方法,去查找xml定义好的那个ScrollView,把他放入一个变量中,如view1,当然前提是你要再xml里面给这个ScrollView起一个名字
3、调用view1.add(lineLayout1)方法把lineLayout1加进去
当然这是一个大方向,具体的代码细节你要再研究一下
1.使用代码编写一个底部选项卡的布局
2.整个页面的容器布局(包含Fargment,分割线,选项卡)
private void initView(Context context) {
setBackgroundColor(0xfff6f6f6);
FrameLayout frameLayout=new FrameLayout(context);//选项界面容器
frameLayout.setId(FL_ID);
View lineView=new View(context);//分割线
lineView.setId(LINE_ID);
RelativeLayout.LayoutParams rlParams=new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
rlParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
rlParams.addRule(RelativeLayout.ABOVE , LINE_ID);
lineView.setBackgroundColor(lineColor);
RelativeLayout.LayoutParams rlParams2=new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, DensityUtils.dip2px(context, 1));
rlParams2.addRule(RelativeLayout.ABOVE , TAB_ID);
addView(frameLayout, rlParams);//选项界面容器
addView(lineView,rlParams2);//分割线
//选项卡容器
linearLayout=new LinearLayout(context);
linearLayout.setBackgroundColor(tabBgColor);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
linearLayout.setGravity(Gravity.CENTER_VERTICAL);
linearLayout.setId(TAB_ID);
tabNum=tabIcos.length;
for (int i = 0; i tabNum; i++) {
View view = createIndicator(tabIcos[i], tabtxts[i], tabItemTvColor, "itemTag"+i, "icoTag" + i, "txtTag" + i);
view.setOnClickListener(OnClick);
if(i== nowTabIndex){//初始化选项卡
changeTab(view, i);
}
linearLay