Android UI——使用ScrollView和HorizontalScrollView显示网页源代码
ScrollView和HorizontalScrollView
1、滚动视图ScrollView和HorizontalScrollView 是两个非常简单的组件,就是用来为视图添加滚动条的容器,前者是用来添加竖直滚动条的,或者用来添加竖直滚动条,我们可以通过嵌套的方式,将水平和竖直滚动条全部添加到一个界面中
2、它们是由FrameLayout派生出来的。所以,ScrollView和HorizontalScrollView里面都是最多只能够包含一个组件,如果我们想要将多个组件加入到这个带滚动条的容器中,那么我们只需要将各个组价添加到布局中,之后将这个布局添加到滚动容器中
3、在默认的情况下,如果在视图中添加了滚动条之后,当我们滑动屏幕的时候位于屏幕边框的滚动条是出现的,我们可以通过调用下面的方法设置滚动条是否隐藏
①对于竖直滚动条组件ScrollView:
public void setVerticalScrollBarEnabled( boolean ) ;
②对于水平滚动条组件HorizontalScrollView:
public void setHorizontalScrollBarEnabled( boolean ) ;
4、我们通过一个例子来演示一下怎么使用这两个组件:
下面的这个例子实际上并不是专门用来演示滑动窗口的使用,更多的是演示一下怎样用Android查看一个网页的源代码:
MainActivity.java 文件,
从上面的图中,我们呢能够看到MainActivity的布局文件中有一个EditText和一个查询的Button,(图片仅是用来显示的,没有实际的作用),当我们在EditText中输入一个网址,之后点击查询Button之后,就会启动ShowActivity,这个ShowActivity是用来发起网络连接,并再ShowActivity的布局文件中,显示加载的网页的源代码的,下面来看看代码:
MainActivity源代码:
public class MainActivity extends Activity { Button search; EditText textURL ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); search = (Button)findViewById(R.id.button) ; textURL = (EditText)findViewById(R.id.editView) ; //当我们启动这个MainActivity之后,EditText显示的是百度的网址,当然也可以自己输入,这一行可以去掉 textURL.setText("http://www.baidu.com"); search.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { String url = textURL.getText().toString(); if(! (TextUtils.isEmpty(url))){ Intent intent = new Intent(MainActivity.this , ShowActivity.class); intent.putExtra("url",url); startActivity(intent) ; } Log.d("tag","进入了单击事件处理器" ); } }); } }
ShowActivity的布局文件如下:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="match_parent"> <HorizontalScrollView android:id="@+id/hScrollView" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="match_parent"/> </HorizontalScrollView> </ScrollView>
ShowActivity的java代码:
public class ShowActivity extends Activity {
//用于显示网页的文本组件
TextView textView ;
//获得MainActivity传递过来的Intent对象中的网址
String textURL ;
//用于读取URL数据流
BufferedReader bInputStream ;
//用于返回加载完成的网页数据
StringBuilder content ;
//建立连接对象
HttpURLConnection conn ;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
if(msg.what == 0x123){
textView.setText(content.toString());
//隐藏不带进度的进度条,这个方法必须在UI线程中
setProgressBarIndeterminateVisibility(false);
}
}
} ;
//加载网页内容,并将内容返回
public void downloadPage(){
new Thread(){
public void run(){
//建立连接
try{
URL myURL = new URL(textURL);
conn = (HttpURLConnection)myURL.openConnection();
conn.setDoInput(true); //允许输入流,即允许下载
conn.setUseCaches(false); //不使用缓冲
conn.setRequestMethod("GET"); //使用get请求
bInputStream =new BufferedReader(new InputStreamReader(conn.getInputStream()));
}catch(Exception e){
Log.d("tag","you are right") ;
}
//开始下载数据
String current ="";
try {
if(bInputStream != null){
while((current=bInputStream.readLine())!=null){
content.append(current+"\n");
}
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if(bInputStream!=null){
try {
bInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(conn != null){
conn.disconnect();
}
//之所以休息一秒钟,是为了让标题栏中环形进度条能够转起来,否则因为加载时间太短看不见效果
try {
Thread.sleep(1000) ;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//发送消息,显示下载的内容
handler.sendEmptyMessage(0x123);
}
}
}.start();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设这窗口特征:启用不显示进度的进度条必须放在SetContentView方法之前
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.activity_show);
ScrollView scrollView = (ScrollView)findViewById(R.id.scrollView) ;
HorizontalScrollView hScrollView = (HorizontalScrollView)findViewById(R.id.hScrollView);
textView = (TextView)findViewById(R.id.textView) ;
textView.setText("加载中请稍后");
//隐藏滑动条
scrollView.setVerticalScrollBarEnabled(false);
hScrollView.setHorizontalScrollBarEnabled(false);
//显示不带进度的进度条,这个方法必须在setContentView(R.layout.activity_show);之后才行
setProgressBarIndeterminateVisibility(true);
//获得MainActivity传递过来的Intent对象中的网址
textURL = getIntent().getStringExtra("url") ;
content = new StringBuilder(1024) ;
//下载网页数据
downloadPage();
}
}
由于我们用到了网络连接,所以需要给这个应用一个网络连接权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.penglee.practical_scrollview_test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="17" android:targetSdkVersion="17" />
//使用数据网络连接应该赋予的权限 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
//使用WIFI网络连接应该赋予的权限 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ShowActivity" android:label="@string/title_activity_show" > </activity> </application> </manifest>

浙公网安备 33010602011771号