实习第四天——安卓开发中遇到的问题

1.实现头像变圆的组件

<span style="font-size:18px;">首先再build.gradle中添加依赖</span>

dependencies {
    ...
    compile 'de.hdodenhof:circleimageview:1.3.0'
}
使用方法如下

<de.hdodenhof.circleimageview.CircleImageView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/profile_image"
    android:layout_width="96dp"
    android:layout_height="96dp"
    android:src="@drawable/profile"
    app:border_width="2dp"
    app:border_color="#FF000000"/>
注:依赖添加在app文件夹下的build.gradle,否则会报错


2.从fragment跳转到activity

从fragment中跳转和从activity中跳转类似,只不过你要先通过fragment的getActivity方法获取到显示这个fragment的activity,具体代码是这样的:

Intent intent = new Intent();
intent.setActivity(getActivity(), TargetActivity.class);

startActivity(intent); //这里用getActivity().startActivity(intent);

如果不返回结果的话,第三行代码没什么区别,如果要返回一个结果的话,可以有类似的两种方法:
//直接从fragment中跳转

startActivityForResult(intent, REQUEST_CODE);

这种写法接收返回的结果要在fragment中重写onActivityResult()方法;
//从activity中跳转

getActivity().startActivityForResult(intent, REQUEST_CODE);
这种写法要在Activity中重写onActivityResult()方法。


3.自由的边框

当前版本的Android SDK并没有给stroke提供bottom、left、right之类的属性,也就是说你无法通过它来让长方形的边框少于4条。啊,真是太遗憾了。怎么办呢?有人想到了对Layer List hack。 在StackOverflow上有不少这样的把戏

为了实现只有left,right和top边框,我们可以这么写:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape android:shape="rectangle" >
            <stroke
                android:width="1dp"
                android:color="@color/card_stroke" />
        </shape>
    </item>

    <item
        android:left="2dp"
        android:right="2dp"
        android:top="2dp">
        <!-- 在实际使用中我发现1dp达不到显示效果,而2dp正好可以显示边框 -->

        <shape android:shape="rectangle" >
            <solid android:color="@color/solid_white" />
        </shape>
    </item>
</layer-list>

原理差不多是这样:

如果要给图形加上圆角,只需要给每个shape加上

<corners
    android:topLeftRadius="5.0dip"
    android:topRightRadius="5.0dip" />

值得注意的是,两个shape的radius在设置的时候请确保前面的图层不会把后面的挡住。


4.设置界面(如微信)

布局的组合,用tableLayout


5.返回按钮的实现

mCancel = (Button)findViewById(R.id.btn_cancel);

mCancel.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

finish();//这个是关键

}

});

发布了34 篇原创文章 · 获赞 2 · 访问量 4万+
展开阅读全文

在做项目实训,遇到Xml解析的问题

06-19

运行时出现这样的问题setInput() must be called first. (position:START_DOCUMENT null@1:1) <?xml version="1.0" encoding="UTF-8"?> -<Response>-<Error><ErrorCode>0</ErrorCode></Error>-<Data>-<UserBean><Id>269</Id><Gender>1</Gender><Department>1</Department><Email>1234567@163.com</Email><Age>11</Age></UserBean></Data></Response> 我的代码是: public class XmlRegist extends XmlGridParser { boolean isLoginfo = false; boolean isName = false; boolean isGender = false; boolean isDepart = false; boolean isPass = false; boolean isEmail = false; boolean isAge = false; public XmlRegist(InputStream is, XmlPullParser parser) throws ParseException { super(is, parser); } protected void handleExtraElementInEntry(EntryP entry) throws XmlPullParserException, IOException, ParseException { XmlPullParser parser = getParser(); if (!(entry instanceof EntryLogin)) { throw new IllegalArgumentException("Expected EntryRegist!"); } EntryRegist regist = (EntryRegist) entry; int type = parser.getEventType(); try { while (type != XmlPullParser.END_DOCUMENT) { String name = parser.getName(); switch( type) { case XmlPullParser.START_DOCUMENT: break; case XmlPullParser.START_TAG: {if(name.equals("Data")) { if (type == XmlPullParser.START_TAG && name.equals(regist.USERBEAN)) { if (type == XmlPullParser.START_TAG && name.equals(regist.LOFINFO)) { isLoginfo = true; } else if (type == XmlPullParser.END_TAG&& name.equals(regist.LOFINFO)) { isLoginfo = false; } else if(type==XmlPullParser.START_TAG&&name.equals(regist.NAME)) { isName=true; }else if(type==XmlPullParser.END_TAG&&name.equals(regist.NAME)) { isName=false; } else if(type==XmlPullParser.START_TAG&&name.equals(regist.GENDER)) { isGender=true; }else if(type==XmlPullParser.END_TAG&&name.equals(regist.GENDER)) { isGender=false; } else if(type==XmlPullParser.START_TAG&&name.equals(regist.DEPART)) { isDepart=true; }else if(type==XmlPullParser.END_TAG&&name.equals(regist.DEPART)) { isDepart=false; } else if(type==XmlPullParser.START_TAG&&name.equals(regist.PASS)) { isPass=true; }else if(type==XmlPullParser.END_TAG&&name.equals(regist.PASS)) { isPass=false; } else if(type==XmlPullParser.START_TAG&&name.equals(regist.AGE)) { isAge=true; }else if(type==XmlPullParser.END_TAG&&name.equals(regist.AGE)) { isAge=false; } else if (type == XmlPullParser.TEXT) { if (isLoginfo) { if (Util.isNull(parser.getText())) { regist.setUserId(parser.getText()); } } if (isName) { if (Util.isNull(parser.getText())) { regist.setUsername(parser.getText()); } } if (isGender) { if (Util.isNull(parser.getText())) { regist.setGender(parser.getText()); } } if (isDepart) { if (Util.isNull(parser.getText())) { regist.setDepart(parser.getText()); } } if (isPass) { if (Util.isNull(parser.getText())) { regist.setPass(parser.getText()); } } if (isEmail) { if (Util.isNull(parser.getText())) { regist.setEmail(parser.getText()); } } if (isAge) { if (Util.isNull(parser.getText())) { regist.setAge(parser.getText()); } } } else if (type == XmlPullParser.END_TAG && name.endsWith(regist.USERBEAN)) { break; } type = parser.next(); } } } } } } catch (XmlPullParserException e) { UtilLog.e("Xml XmlLogin-handleExtraElementInEntry(): ", e.getMessage()); } } } 应该是解析时出错了,可是都两天了,实在是找不到原因,只能求助于各位大神啦。 在线坐等 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览