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>

 

posted @ 2014-11-16 15:18  RoperLee  阅读(339)  评论(0)    收藏  举报