Android Studio学习之零碎的操作和知识点

一、新建一个不带activity的项目:
File->New->New Project
填写Application name和Company Domain。点击Next,选择no activity。
点击Project中的项目视图,选择Project形式的项目树,
然后在src->main->java->【刚刚创建的包名】->new 一个java class,
填写名字,后点OK,接着在里面填写相关代码。继承Activity类。重写onCreate()方法。
在res文件夹上点击右键,new一个directory,填写layout,点OK。
在layout上点右键,new一个XML->Layout XML File,填写名字,根元素。Finish
在下方,Design是可以通过拖拽的方式编辑布局,Text是通过XML文件的方式
来编辑布局。
或者直接new empty activity








二、如何关闭安卓手机显示字体的大写:

活动配置文件里:
android:textAllCaps="false"  关闭字母的大写






三、启动模式的各个分类:
AndroidManifest.xml里:
android:launchMode="standard"  表示同一个任务栈里,可以有不同的活动ID
android:launchMode="singleTop" 表示同一个任务栈里,处在栈顶的活动只有一个ID,而非栈顶的活动,可以有不同的ID
android:launchMode="singleTask"表示同一个任务栈里,一个活动只有一个ID,当其他活动新建一个已经存在的活动时,其他活动会自动结束,回到已存在的活动。
android:launchMode="singleInstance"表示独立的一个任务栈只存放一个活动。若新建活动,则直接新建任务栈。





四、如何将活动改为不给其他应用调用:

android:exported="false"  表示此活动不给别的应用调用






五、【如何远程从另一个App2中启动一个App1的Service:】

在App2中的Aty中,用Intent intent=new Intent();  

然后 intent.setComponent(new ComponentName("",""));  //用此setComponent方法

两个参数分别为:App1的Service的包的地址,App1的Service的类的地址。







六、【如何远程从另一个App2中绑定一个App1的Service:】
******用AIDL 机制:******
在这个App1中创建一个AIDL,然后使Service 的IBinder返回一个new IMain1AIDL.Stub() {};
然后在App2中也创建一个一模一样的AIDLfolder和AIDL,然后在App2的Aty中的
@Override
    public void onServiceConnected(ComponentName name, IBinder service) {


        binder= IMain1AIDL.Stub.asInterface(service);
    }
用这种方式强制类型转换在App1的Service中的IBinder返回的 new IMain1AIDL.Stub() {};类型  给一个这个App2中的AIDL的对象:private IMain1AIDL binder=null;
这样,这个App2中的binder里的数据,就是App1中的数据。









七、【如何新建一个fragment的project】
首先,不用IDE自带的fragment,也就是不选择blank activity和里面的勾选fragment。
也就是拒绝IDE 帮我们建立fragment。因为会添加很多无关的代码。
然后,我们选择empty activity,新建完成后,我们就可以在包名上,点击右键
新建一个Fragment(blank),然后把里面的
Create layout XML? 选上
Include fragment factory methods? 和 Include interface callbacks? 都不选,主要是一下方法和接口。我们需要的话自己写就好了,AS提供的代码提示很方便。
点击finish,然后就需要注册一个android:id   这样就可以用动态的fragment:


public class FragmentApp extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.newone_fragment);                              //在这里,设置了一个无控件的layout的xml文件
        if(savedInstanceState == null)                                         //动态的fragment调用。
        {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.fragment,new FragmentAppFragment())              //这里为已注册的android:id
                    .commit();
        }


    }




}






那么怎么注册呢,就在上面的无控件的layout的xml文件里,添加一行:android:id="@+id/fragment"
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/fragment"                          //就可以了!
    >


</LinearLayout>
PS:可以不为空的配置文件,如果部位空,那么它上面的控件,在其他所有的fragment上都存在,即都会显示出来。








八、【在带侧边栏的activity里的按钮怎么打开一个新的fragment呢】
首先,创建一个navigation的活动。
删除多余的代码,接着在
SliderActivity里面的一个函数:


    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {         //这个函数就是侧边栏里按钮的监听事件,当然这个可以自定义。
        // Handle navigation view item clicks here.
        int id = item.getItemId();


        if (id == R.id.nav_camera) {
            getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.drawer_layout,new BlankFragment())    //这个id是当前事件的id,在这里,是sliderActivity的setcontentview里的布局的id
                    .commit();
        } else if (id == R.id.nav_gallery) {


        } else if (id == R.id.nav_slideshow) {


        } else if (id == R.id.nav_manage) {


        } else if (id == R.id.nav_share) {


        } else if (id == R.id.nav_send) {


        }


        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}
上面代码的核心就是:
           getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.drawer_layout,new BlankFragment())    //这个id是当前事件的id,在这里,是sliderActivity的setcontentview里的布局的id
                    .commit();


这里的R.id.drawer_layout,是指sliderActivity的setcontentview里的布局的id:
setContentView(R.layout.activity_slider);                                  //也就是这个布局的id :


//activity_slider.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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/drawer_layout"                                        //【【 id 】】在这里 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">






    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_slider"
        app:menu="@menu/activity_slider_drawer" />


</android.support.v4.widget.DrawerLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值