首页 文章 精选 留言 我的

精选列表

搜索[人设自定义],共10000篇文章
优秀的个人博客,低调大师

Android AlertDialog去除黑边白边自定义布局(转)

LayoutInflater inflater = this.getLayoutInflater(); View view = inflater.inflate(R.layout.test_alertdialog_listview,null); ListView lv = (ListView)view.findViewById(R.id.test_alertdialog_listview); lv.setAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1,datas)); lv.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { alertdialog.dismiss(); Toast.makeText(TestAndroid.this, datas[position], Toast.LENGTH_LONG).show(); } }); alertdialog = new AlertDialog.Builder(this) // .setView(view); .setItems(datas, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }) .create(); // 在此使用setview方法可以设置布局文件和alertdialog四周边框的距离,可以消除黑边框 alertdialog.setView(view, 0, 0, 0, 0); alertdialog.show(); 本文转自欢醉博客园博客,原文链接http://www.cnblogs.com/zhangs1986/p/4413697.html如需转载请自行联系原作者 欢醉

优秀的个人博客,低调大师

android100 自定义内容提供者

#ContentProvider,就是来操作数据的,增删改查, * 四大组件之一 * 应用的数据库是不允许其他应用访问的 * 内容提供者的作用就是让别的应用访问到你的数据库 * 内容提供者的作用:把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用 * 短信联系人都是在数据库里面。mmssms是短信数据库, * 短信数据库有短信数据库的内容提供者,联系人数据库有联系人数据库的内容提供者。拿到对应数据库的内容提供者就能够访问对应的数据库数据。 ###短信数据库 * sms表 * body:短信内容 * date:短信时间 * address:对方号码 * type:发送还是接收 ###联系人数据库 * raw_contacts表 * contact_id:联系人id * data表:存放联系人的详细的信息,每行数据是单独的一条联系人信息 * data1:联系人的具体的信息 * raw_contact_id:该行信息属于哪个联系人 * mimetype_id:该行信息属于什么类型 * mimetypes表:mimetype_id对应的类型的字符串 ###UriMatcher * 用于判断一条uri跟指定的多条uri中的哪条匹配 * 添加匹配规则 // 指定多条uri um.addURI( " com.itheima.person ", " person " , PERSON_CODE); um.addURI( " com.itheima.person ", " company " , COMPANY_CODE); // #号可以代表任意数字 um.addURI( " com.itheima.person ", " person/# " , QUERY_ONE_PERSON_CODE); * 通过Uri匹配器可以实现操作不同的表 @Override public Uri insert(Uri uri, ContentValues values) { if(um.match(uri) == PERSON_CODE){ db.insert( " person ", null , values); } else if(um.match(uri) == COMPANY_CODE){ db.insert( " company ", null , values); } else { throw new IllegalArgumentException(); } return uri; } * 如果路径中带有数字,把数字提取出来的api int id = ( int) ContentUris.parseId(uri); 01项目的MyOpenHelper: package com.itheima.customcontentprovider; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class MyOpenHelper extends SQLiteOpenHelper { public MyOpenHelper(Context context) { super(context, "people.db", null, 2); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table person(_id integer primary key autoincrement, name char(10), money integer(20))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("create table teacher(_id integer primary key autoincrement, name char(10))"); } } 01项目Test.java package com.itheima.customcontentprovider; import android.test.AndroidTestCase; public class Test extends AndroidTestCase { public void test(){ MyOpenHelper oh = new MyOpenHelper(getContext());//getContext()是获取虚礼上下文 oh.getWritableDatabase(); } } 02项目的MainActivity.java package com.itheima.visitprovider; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cursor; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void insert(View v){ //通过内容提供者把数据插入people数据库 //拿到contentResolver来访问内容提供者 ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put("name", "赵帅哥"); // values.put("money", "13000"); //url:内容提供者的主机名地址 //values:要插入的数据 cr.insert(Uri.parse("content://com.itheima.people/teacher"), values);//com.itheima.people是01项目的内容提供者的地址,teacher表示插入teacher表 } public void delete(View v){ ContentResolver cr = getContentResolver(); int i = cr.delete(Uri.parse("content://com.itheima.people"), "name = ?", new String[]{"小志"}); System.out.println(i); } public void update(View v){ ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put("name", "sb志"); int i = cr.update(Uri.parse("content://com.itheima.people"), values, "name = ?", new String[]{"大志"}); System.out.println(i); } public void select(View v){ ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(Uri.parse("content://com.itheima.people/person/4"), null, null, null, null);//person表示是person表,4是用来作id的, while(cursor.moveToNext()){ String name = cursor.getString(1); String money = cursor.getString(2); System.out.println(name + ";" + money); } } } 01项目PersonProvider.java package com.itheima.customcontentprovider.provider; import com.itheima.customcontentprovider.MyOpenHelper; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; public class PersonProvider extends ContentProvider { private MyOpenHelper oh; SQLiteDatabase db; //创建uri匹配器对象 static UriMatcher um = new UriMatcher(UriMatcher.NO_MATCH); //检测其他用户传入的uri与匹配器定义好的uri中,哪条匹配 static { um.addURI("com.itheima.people", "person", 1);//content://com.itheima.people/person um.addURI("com.itheima.people", "teacher", 2);//content://com.itheima.people/teacher um.addURI("com.itheima.people", "person/#", 3);//content://com.itheima.people/person/4,#表示任何数字,*表示任何文本, } //内容提供者创建时调用 @Override public boolean onCreate() { oh = new MyOpenHelper(getContext()); db = oh.getWritableDatabase(); return false; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor cursor = null; if(um.match(uri) == 1){ cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder, null); } else if(um.match(uri) == 2){ cursor = db.query("teacher", projection, selection, selectionArgs, null, null, sortOrder, null); } else if(um.match(uri) == 3){ //把uri末尾携带的数字取出来 long id = ContentUris.parseId(uri); cursor = db.query("person", projection, "_id = ?", new String[]{id + ""}, null, null, sortOrder, null); } else{ throw new IllegalArgumentException("uri又有问题哟亲么么哒"); } return cursor; } @Override public String getType(Uri uri) { if(um.match(uri) == 1){ return "vnd.android.cursor.dir/person";//表示请求的是person的多条数据 } else if(um.match(uri) == 3){ return "vnd.android.cursor.item/person";//表示请求的是person的单条数据 } return null; } //此方法供其他应用调用,用于往people数据库里插数据 //values:由其他应用传入,用于封装要插入的数据 //uri:内容提供者的主机名,也就是地址 @Override public Uri insert(Uri uri, ContentValues values) { //使用uri匹配器匹配传入的uri if(um.match(uri) == 1){ db.insert("person", null, values); //发送数据改变的通知 //uri:通知发送到哪一个uri上,所有注册在这个uri上的内容观察者都可以收到这个通知 getContext().getContentResolver().notifyChange(uri, null); } else if(um.match(uri) == 2){ db.insert("teacher", null, values); getContext().getContentResolver().notifyChange(uri, null); } else{ throw new IllegalArgumentException("uri有问题哟亲么么哒"); } return uri; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { int i = db.delete("person", selection, selectionArgs); return i; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int i = db.update("person", values, selection, selectionArgs); return i; } } /* 清单文件: <provider android:name="com.itheima.customcontentprovider.provider.PersonProvider" android:authorities="com.itheima.people" android:exported="true"> </provider> authorities="com.itheima.people"是一个地址,是内容提供者的地址,通过这个地址就可以访问到这个内容提供者 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.itheima.customcontentprovider"> </instrumentation> */ 02项目就访问到了01项目的数据库。 本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4970145.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

docker学习笔记(四)——Dockerfile创建自定义镜像

用Dockerfile创建docker,注意下,建议在空文件夹下创建 本篇我们将完成: 1、用Dockerfile创建docker 2、端口映射 3、卷挂载,即docker目录挂载到宿主机 1、用Dockerfile创建docker 在/opt/centos/目录下,创建Dockerfile 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #CentosbasedcontainerwithJavaandTomcat FROM127.0.0.1:5000 /centos :v2 #镜像源,这里为私有 MAINTAINERjack.zhang #作者 ENVREFRESHED_AT2017-8-28 #日期 #Prepareenvironment#声明创建变量 ENVJAVA_HOME /opt/jdk1 .8.0_131 ENVJRE_HOME /opt/jdk1 .8.0_131 /jre ENVCLASSPATH.:$JAVA_HOME /lib :$JRE_HOME /lib :$CLASSPATH ENVPATH$JAVA_HOME /bin :$JRE_HOME /bin :$PATH RUN mkdir /data RUNyum install -ywget #建议搭建本地软件源,取包比较快,当时直接yum安装也可以,前提宿主机可以上网 RUNwgethttp: //192 .168.10.144:9098 /jdk-8u131-linux-x64 . tar .gz&&\ #下载10.144安装包 tar -xvfjdk-8u131-linux-x64. tar .gz-C /opt/ #InstallTomcat RUNwgethttp: //192 .168.10.144:9098 /tomcat . tar .gz&&\ tar -xvftomcat. tar .gz-C /data/ &&\ mv /data/tomcat /data/tomcat8 RUN chmod +x /data/tomcat8/bin/ *sh VOLUME[ "/data/tomcat8/webapps/" ] EXPOSE8090 #对外暴露的端口,即对外提供服务的端口 EXPOSE8009 ENTRYPOINT[ "/data/tomcat8/bin/catalina.sh" , "run" ] #启动tomcat,注意,docker里面的进程要一直挂起,要不然会退出,我们用这种办法启动 文件编辑完成后,我们来生成docker 1 2 3 4 5 6 7 8 9 注意命令后有个点,不要忘记,当前文件夹下面一定有Dockerfile #dockerbuild-ttest/test_app. 会打印一堆日志,这不影响,如果有异常可以找出对应问题, 创建后,我们看下是不是已经成功了 #dockerimages REPOSITORYTAGIMAGEIDCREATEDSIZE test /test_app latest29175ec8a72017hoursago836MB 2、端口映射 因为上面的端口已经暴露出来,只要tomcat启动了,端口就是通的,所以我们这里要做的就是启动docker并把端映射出来,这里的8090是docker提供服务的端口 1 2 3 4 5 6 7 启动docker并映射端口注意,-p就是端口映射 #dockerrun-d-p8090:8090--restart=always--nametomcattest/test_app 看下进程是否启动成功 #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 923bc1dda78f test /test_app "/data/tomcat8/bin..." 29minutesagoUp29minutes8009 /tcp ,0.0.0.0:8090->8090 /tcp tomcat 用宿主机访问IP:端口,访问是不是可以访问到了? 需要说明的是,端口映射其它是基于iptables的,所以如果docker启动没问题,进程也存在,确认宿主机的iptables 是否启动 centos iptables 1 #systemctlstartfirewalld.service#启动firewall 3、卷挂载,即docker目录挂载到宿主机 其它挂载目录到宿主机,没什么特别的,有些文档介绍的好像有多么深奥,其实没啥 只是启动命令加下参数罢了, 先关闭运行中的docker 1 #dockerstop923bc1dda78f923bc1dda78f是docker的进程号,通过dockerps可以看得到 好了,挂载目录启动 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 - v 命令,注意前面的是宿主机的目录,后面提docker目录 即把宿主机的 /usr/share/nginx/html 挂载到docker的 /data/tomcat8/webapps/ROOT/ 下 #dockerrun-d-v/usr/share/nginx/html:/data/tomcat8/webapps/ROOT-p8090:8090--restart=always--nametomcatapptest/test_app 查看下进程 #dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 923bc1dda78f test /test_app "/data/tomcat8/bin..." 29minutesagoUp29minutes8009 /tcp ,0.0.0.0:8090->8090 /tcp tomcat 我们进入到dockershell看下是不是成功挂载 #dockerexec-it923bc1dda78f/bin/bash#923bc1dda78f为进程号 [root@923bc1dda78f/] #cd/data/tomcat8/webapps/ROOT/ [root@923bc1dda78fROOT] #ls 404.html50x.htmlapache-tomcat-8.5.15-src. tar .gzindex.htmljdk-8u131-linux-x64. tar .gznginx-logo.pngpoweredby.png 可以看到已经功能挂载 直接访问宿主机:端口,是不是首页不一样的~~ 这样是不是很方便了,我们直接维护宿主机的目录就相当于维护docker目录。 本文转自 jackjiaxiong 51CTO博客,原文链接:http://blog.51cto.com/xiangcun168/1958270

优秀的个人博客,低调大师

利用Theme自定义Activity间的切换动画

转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/22990643 大多Android系统默认Activity间的动画切换效果为,右边滑入,左边滑出;有时候我们的需求可能是要求所有Activity的切换为淡入淡出的效果,这时候就可能需要改变一下默认的切换风格。 下面开始实现: 首先在res文件夹下建立anim文件夹,然后在里面建立fade_in.xml和fade_out.xml两个动画资源 fade_in.xml [html] view plain copy <?xmlversion="1.0"encoding="utf-8"?> <alphaxmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromAlpha="0.0" android:interpolator="@android:anim/accelerate_interpolator" android:toAlpha="1.0"/> fade_out.xml [html] view plain copy <?xmlversion="1.0"encoding="utf-8"?> <alphaxmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromAlpha="1.0" android:interpolator="@android:anim/accelerate_interpolator" android:toAlpha="0.0"/> 然后在values文件夹下的styles.xml中的resources标签内写: [html] view plain copy <stylename="Anim_fade"parent="android:Theme.NoTitleBar"> <itemname="android:windowAnimationStyle">@style/fade</item> </style> <stylename="fade"parent="@android:style/Animation.Activity"> <itemname="android:activityOpenEnterAnimation">@anim/fade_in</item> <itemname="android:activityOpenExitAnimation">@anim/fade_out</item> <itemname="android:activityCloseEnterAnimation">@anim/fade_in</item> <itemname="android:activityCloseExitAnimation">@anim/fade_out</item> </style> 最后一步在AndroidManifest.xml中的Activity的声明上加入android:theme="@style/Anim_fade" [html] view plain copy <?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.example.customanimationforactivity" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar"> <activity android:name="com.example.customanimationforactivity.MainActivity" android:label="@string/app_name" android:theme="@style/Anim_fade"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activityandroid:name=".AppActivity"android:theme="@style/Anim_fade"> </activity> </application> </manifest> 贴下Splash Activity的代码: [java] view plain copy packagecom.example.customanimationforactivity; importandroid.app.Activity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.os.Handler; publicclassMainActivityextendsActivity { privateHandlerhandler=newHandler(); @Override protectedvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); handler.postDelayed(newRunnable() { @Override publicvoidrun() { Intentintent=newIntent(MainActivity.this,AppActivity.class); startActivity(intent); finish(); } },1000); } } 本文转自 一点点征服 博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/6248906.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册