Android 开发之旅:深入分析布局文件&又是“Hello World!”

Broadcast Receiver(广播接收者) 相关文章 什么是Service(服务)? Android开发-Intent(意图) Android四大组件,其中两项Activity和Service前面已经说过了,本次来说说第三项 Broadcast Receiver(广播接收者)。 1.1 广播接收者概念 BroadcastReceiver(广播接收者)是Android四大组件之一。 BroadcastReceiver是用于接收广播的组件,用于组件与组件之间进行通信,可以跨应用程序传递。 当有特定事件发生时,例如有来电、有短信、电池电量变化等事件发生 阅读详情
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://skynet.blog.51cto.com/1943397/363569
引言

上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实践,我们拿起手术刀对默认的“Hello World!”程序进行了3个手术,我们清楚了“Hello world!”是如何实现显示在屏幕上的,而且我们知道不仅可以根据布局文件main.xml来初始化屏幕,还可编程地进行。以后基本我们都会以实践的方式来深入Android开发。我们这次深入分析Android应用程序的布局文件,主要内容如下:

  1. 1、用户界面及视图层次
  2. 2、Android中布局定义方法
  3. 3、编写XML布局文件及加载XML资源
  4. 4、常用布局文件中元素的属性
    1. 4.1、ID属性
    2. 4.2、布局参数
  5. 5、布局位置&大小&补距&边距
  6. 6、又是“Hello World!”
    1. 6.1、又是“Hello World!”(一)
    2. 6.2、又是“Hello World!”(二)
    3. 6.3、又是“Hello World!”(三)
1、用户界面及视图层次

在通过“Hello World!”介绍Android中的布局问题之前,不得不先介绍一下Android中的用户界面,因为布局问题也是用户界面问题之一。在一个Android应用程序中,用户界面通过View和ViewGroup对象构建。Android中有很多种Views和ViewGroups,他们都继承自View类。View对象是Android平台上表示用户界面的基本单元。

View类:

extends Object
implements Drawable.Callback   KeyEvent.Callback   AccessibilityEventSource

这个类表示用户界面组件的基本构建块,一个View占据屏幕上的一个矩形区域,并负责绘图和事件处理。View类是widgets的基类,widgets用于创建交互式UI组件(buttons、text fields等)。View类的直接子类ViewGroup类是layouts的基类,layouts是不可见的容器用户保持其他Views或者其他ViewGroups和定义它们的布局属性。

一个View对象是一个数据结构,它的属性存储屏幕上一个特定矩形区域的布局参数和内容。一个View对象处理它自己的测度、布局、绘图、焦点改变、滚动、键/手势等与屏幕上矩形区域的交互。作为用户界面中的对象,View也是与用户交互的一个点且交互事件接收器。

在Android平台上,你定义活动的UI使用的View和ViewGroup节点的层次结构如下图所示。根据你的需要这个层次树可以是简单的或复杂的,并且你能使用Android预定义的widgets和layouts集合,或者使用自定义的Views。

Android 开发之旅:深入分析布局文件&又是“Hello World!”

图1、视图层次结构

为了将视图层次树呈现到屏幕上,你的活动必须调用setContentView()方法并且传递到根节点对象的引用。Android系统接收这个引用并使用它来验证、测度、绘制树。层次的根节点要求它的孩子节点绘制它自己——相应地每个试图组节点要求调用自己的孩子视图去绘制他们自己。子视图可能在父视图中请求指定的大小和位置,但是父视图对象有最终决定权(子视图在哪个位置及多大)。因为它们是按序绘制的,如果元素有重叠的地方,重叠部分后面绘制的将在之前绘制的上面。

2、Android中布局定义方法

布局是一个活动中的用户界面的架构,它定义了布局结构且存储所有显示给用户的元素。有两种方式可以声明布局,这个我们在上文中已经用了(对应上文的“Hello World的手术(二)”、“Hello World的手术(三)”)。我们再重温总结一下:

  • 方法一、在XML格式的布局文件中声明UI。Android提供了简易的XML词汇表对应视图类和其子类,诸如 widgets和 layouts。
  • 方法二、在运行时实例化布局元素。可以编程地创建View和ViewGroup对象,并操作他们的属性。

Android框架给我们灵活地使用这两个方法之一或两个声明和管理你的应用程序的UI。例如,你可以用XML格式的布局文件定义应用程序默认的布局,包括将显示在屏幕的元素和属性。然后你可以编程地修改屏幕上对象的状态,包括定义在XML文件中的元素。

最常用的是方法一,即用一个XML的布局文件定义自己的布局和表达层次视图。XML提供一种直观的布局结构,类似HTML。XML中的每个元素是一个View或者ViewGroup对象(或继承自他们的对象)。View对象是树中的叶子,ViewGroup对象是树中的分支,这点可以从上面的视图层次树中可以看出。

在XML布局文件中声明UI的优点是:使应用程序的界面与控制它行为的代码更好地分离了。UI描述在应用程序代码之外,这意味着你可以修改或调整它而不用修改你的源码并重新编译。例如,你可以为不同的屏幕方向、不同的屏幕大小、不同的语言创建XML布局文件。此外,在XML中声明布局更易地可视化你的UI结构,因此更容易调试问题。

一个元素XML元素的名字对应到一个Java类,因此一个<TextView>元素在你的UI中创建一个TextView,一个<linearLayout>元素创建一个LinearLayout的视图组。当你加载一个布局资源时,Android系统初始化这些运行时对象,对应你的布局中的元素。XML元素的属性对应到一个Java类的方法。

3、编写XML布局文件及加载XML资源

使用Android的XML词汇,我们可以快速地设计UI布局及包含的屏幕元素,就像web页面的HTML。每个布局文件必须包含一个根元素,根元素必须是一个View或ViewGroup对象。一旦你已经定义了根元素,你可以添加额外的layout对象或widgets作为子元素,逐步地构建一个视图层次定义你的布局。例如,下面的XML布局文件使用了纵向的LinearLayout保存一个TextView和一个Button。

  
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  3.               android:layout_width="fill_parent"   
  4.               android:layout_height="fill_parent"   
  5.               android:orientation="vertical" >   
  6.     <TextView android:id="@+id/text"   
  7.               android:layout_width="wrap_content"   
  8.               android:layout_height="wrap_content"   
  9.               android:text="Hello, I am a TextView" />   
  10.     <Button android:id="@+id/button"   
  11.             android:layout_width="wrap_content"   
  12.             android:layout_height="wrap_content"   
  13.             android:text="Hello, I am a Button" />   
  14. </LinearLayout>  

布局文件以.xml为扩展名,保存在res/layout/下面,它将会被正确地编译。我们已经定义好了布局文件,那它是怎么被加载的呢?当我们编译应用程序时,每个XML布局文件被编译成一个View资源。我们应该在应用程序代码中加载布局资源,在Activity.onCreate()回调中通过调用setContentView()实现,以R.layout.layout_file_name 形式传递给它布局资源的引用。例如,如果你的XML布局保存为main_layout.xml,你应该这样加载它:

  
  1. public void onCreate(Bundle savedInstanceState) {   
  2.     super.onCreate(savedInstanceState);   
  3.     setContentView.(R.layout.main_layout);   
  4. }  

活动中的onCreate()回调方法,当你的活动启动时被Android框架调用(详见Android 开发之旅:组件生命周期(一),详细介绍了活动组件的生命周期)。

4、常用布局文件中元素的属性

每个View和ViewGroup对象支持他们自己的各种XML属性。一些属性特定于一个View对象(例如,TextView支持textSize属性),但是这些属性也被继承自这个类的任何View对象继承。一些属性对所有View对象可用,因为他们从根View类继承(诸如id属性)。并且,其他属性被考虑为“布局参数”,这些属性描述特定View对象的特定布局方向,由对象的父ViewGroup对象定义。

4.1、ID属性

每个View对象都有一个关联的ID,来唯一标识它。当应用程序被编译时,这个ID作为一个整数引用。但是ID通常是在布局XML文件中作为字符串分配的,作为元素的id属性。这个XML属性对所有的View对象可用且会经常用到。XML中的ID语法如下:

android:id="@+id/my_button"

字符串前的@符号表示XML解析器应该解析和扩展剩下的ID字符串,并把它作为ID资源。+符号表示这是一个新的资源名字,它必须被创建且加入到我们的资源(R.java文件,R是Resource)。Android框架提供一些其他的ID资源。当引用一个 Android资源ID时,你不需要+符号,但是你必须添加android包名字空间,如下:

android:id="@android:id/empty"

为了创建视图和从应用程序引用他们,通常的模式是:

  1. 首先在布局文件中定义一个视图/构件对象并分配一个唯一的ID:
     
        
    1. <Button android:id="@+id/my_button"   
    2.         android:layout_width="wrap_content"   
    3.         android:layout_height="wrap_content"   
    4.         android:text="@string/my_button_text"/> 
  2. 然后创建一个视图对象实例并从布局中获取它(典型的是在onCreate()方法中):
    Button myButton = (Button) findViewById(R.id.my_button);
4.2、布局参数

名为layout_something的XML布局属性,为视图定义适合于它所驻留的ViewGroup的布局参数。每个ViewGroup类实现一个扩展自ViewGroup.LayoutParams的嵌套类。这个子类包含为每个子视图定义大小和位置的属性类型,以适合于该视图组。如下图所示,父视图组为每个子视图定义布局参数(包括子视图组)。

Android 开发之旅:深入分析布局文件&又是“Hello World!”

图2、布局参数

注意每个LayoutParams子类有它自己的设置值的语法。每个子元素必须定义适合于它父视图的LayoutParams,虽然它可能也为自己的子视图定义不同LayoutParams。

所有的视图组包括宽带和高度(layout_width和layout_height),并且每个视图要求要定义它们。许多LayoutParams也包括可选的边距和边界。你可以指定宽度和高度的具体值,虽然你可能并不想这样做。更多地你将告诉视图它的大小依据它内容要求或跟父视图组所允许的一样大(分别用wrap_content和fill_parent值)。

5、布局位置&大小&补距&边距

视图的几何形状是一个矩形。视图的位置表示为一个left和top的坐标对,尺寸(dimensions)表示为宽度和高度。位置和尺寸的单位是像素(pixel)。

可以通过调用getLeft()和getTop()检索视图的位置。前者返回视图矩形坐标的left或x,后者返回视图矩形坐标的right或y。这些方法返回相对于与其父视图的相对位置,例如当getLeft()返回20,即认为视图到其直接父视图的左边距离为20像素。

此外,提供了一些额外的方法如getRight()和getButtom()避免不必要的计算。这些方法返回视图坐标的右边距和底边距。例如,调用getRight()等同于下面的计算:getLeft()+getWidth()。

视图的大小(size)也表示为宽度和高度,但跟上面尺寸(dimensions)是区别的。上面的尺寸定义视图想在父视图中占多大,视图的尺寸可以通过getMeasureWidth()和getMeasureHeight()获得。而视图的大小(size)则表示视图在屏幕上的实际大小,他们的值可以跟视图尺寸的不一样,但也不是非得这样。视图的大小可以通过getWidth()和getHeight()获得。

为了估量视图的尺寸,必须考虑它的补距(padding,即视图内容与视图边框的距离)。补距以像素表示视图的left、top、right和bottom部分的空白。补距可以用来按特定数量的像素偏移视图内容。例如,左补距是2将输出内容离左边框2像素。补距可以通过setPadding(int, int, int, int)方法设置和通过getPaddingLeft()、getPaddingRight()、getPaddingTop()、getPaddingBottom()来查询。虽然一个视图可以定义补距,但是它不支持边距(margins)。然而,视图组支持边距。

6、又是“Hello World!”

下面我们通过几个实验来验证和加深上述关于布局文件理解。

6.1、又是“Hello World!”(一)

验证名为layout_something的XML布局属性,用layout_width和layout_height定义Button的宽度和高度,这两个属性也是每个视图对象都必须要声明定义的。验证wrap_content与fill_parent的区别,其实区别从他们的单词组成就可以看出:wrap——包,包裹等而content——内容,则wrap_content表示视图对象的高度/宽度正好包住内容;fill——填充等而parent——父,则fill_parent表示填满父视图。

实验设置为:在布局资源文件中定义两个Button,id分别为button1、button2,button1的宽度和高度属性都是wrap_content,button2的宽度和高度属性都是fill_parent。main.xml文件代码如下:

  
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  3.               android:layout_width="fill_parent"   
  4.               android:layout_height="fill_parent"   
  5.               android:orientation="vertical" >   
  6.     <Button android:id="@+id/button1"   
  7.             android:layout_width="wrap_content"   
  8.             android:layout_height="wrap_content"   
  9.             android:text="Hello, I am a Button" />   
  10.     <Button android:id="@+id/button2"   
  11.     android:layout_width="fill_parent"   
  12.     android:layout_height="fill_parent"   
  13.     android:text="Hello, I am a Button"   
  14.     />   
  15. </LinearLayout> 

而HelloWorld.java文件代码为:

  
  1. package skynet.com.cnblogs.www;   
  2.  
  3. import android.app.Activity;   
  4. import android.os.Bundle;   
  5. import android.widget.*;//注意:导入此包,或者是android.widget.Button;   
  6.  
  7. public class HelloWorld extends Activity {   
  8.     private CharSequence text="new Hello!";   
  9.  
  10. /** Called when the activity is first created. */   
  11.     @Override   
  12.     public void onCreate(Bundle savedInstanceState) {   
  13.         super.onCreate(savedInstanceState);   
  14.         setContentView(R.layout.main);   
  15.     }   
  16. }  

运行可以得到如下图结果:

Android 开发之旅:深入分析布局文件&又是“Hello World!”

图3、验证 验证名为layout_something的XML布局属性

明显可以看出button1的大小是刚好包住内容“Hello,I am a Button”,而button2的大小则是填满父视图的大小。

6.2、又是“Hello World!”(二)

接下来我们视图对象的通用属性ID及再次验证定义布局的两种方式。(关于ID属性——首先在布局文件中定义一个视图/构件对象并分配一个唯一的ID,然后创建一个视图对象实例并从布局中获取它(典型的是在onCreate()方法中))。

属性实验设置为:基本跟上面一样,但是我们要编程地修改button1的text属性。main.xml布局文件跟上面一样,而主要是HelloWorld.java文件不一样,它的代码如下:

  
  1. package skynet.com.cnblogs.www;   
  2.  
  3. import android.app.Activity;   
  4. import android.os.Bundle;   
  5. //import android.widget.*;   
  6. import android.widget.Button;   
  7.  
  8. public class HelloWorld extends Activity {   
  9.     private CharSequence text="new Hello!";   
  10.  
  11. /** Called when the activity is first created. */   
  12.     @Override   
  13.     public void onCreate(Bundle savedInstanceState) {   
  14.         super.onCreate(savedInstanceState);   
  15.         setContentView(R.layout.main);   
  16.         Button myButton=(Button)findViewById(R.id.button2);   
  17.         myButton.setText(text);   
  18.     }   
  19. }  

上面红色粗体的两行代码就是编程地改变button2的text属性,这体现了Android框架给我们灵活地使用上面两个方法之一或两个声明和管理你的应用程序的UI。运行结果如下图所示:

Android 开发之旅:深入分析布局文件&又是“Hello World!”

 

图4、验证视图对象的通用属性Id的常用模式及编程地改变定义在XML布局文件中的Button的属性

6.3、又是“Hello World!”(三)  

验证视图对象的布局位置&大小&补距,实验设置为:在实验一的基础上在main.xml中修改button1的布局位置、大小、补距等属性。修改后的mian.xml文件如下:

  
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  3.               android:layout_width="fill_parent"   
  4.               android:layout_height="fill_parent"   
  5.               android:orientation="vertical" >   
  6.     <Button android:id="@+id/button1"   
  7.             android:layout_width="wrap_content"   
  8.             android:layout_height="wrap_content"              
  9.             android:text="Hello, I am a Button"   
  10.             android:width="250dp"   
  11.             android:height="80dp"   
  12.             android:padding="20dp"   
  13.             android:layout_margin="20dp"   
  14.             />   
  15.     <Button android:id="@+id/button2"   
  16.     android:layout_width="fill_parent"   
  17.     android:layout_height="fill_parent"   
  18.     android:text="Hello, I am a Button"   
  19.     />   
  20. </LinearLayout>  

运行后结果如下所示:

Android 开发之旅:深入分析布局文件&又是“Hello World!”

图5、 验证视图对象的布局位置&大小&补距

NOTE:上述代码中布局位置&大小&补距的单位(如width="250dp")。单位可以为px、in、mm、pt、dp、sp。

  1. px:pixels(像素)——对应屏幕上实际的像素
  2. in:inches(英寸)——基于物理屏幕的大小
  3. mm:millimeters(毫米)——基于物理屏幕的大小
  4. pt:points(点)——英寸的1/72,基于基于物理屏幕的大小
  5. dp:density-independent pixels(独立于密度的像素)——一个抽象的基于物理屏幕密度的单位。这些单位是相对于一个160dpi的屏幕,所有一个dp是160dpi屏幕上的一个点。dp到px的转换比率根据屏幕密度改变,但不一定是成正比。
  6. sp:scale-independent pixels(规模独立像素)——类似于dp单位,但是它也受用户字体大小设置的影响。当你指定字体大小时使用它,因为他们将根据屏幕和用户设置调整。
Android - Hello World 示例 无 阅读详情

相关推荐

Hello World代码分析(Android)

基本代码 对MainActivity进行注册 只有在AndroidManifest.xml中进行注册的Android才能使用 Activity是Android应用程序的门面,凡是可以在应用中看见的东西都存放在Activity里面 &lt;activity android:name=".MainActivity"&gt; &lt;intent-filter&gt; &lt;action android:name="android.intent.action.MA..

whdidw的博客 3054

android在layout文件夹,Android Studio 在layout文件夹下建立子文件夹

碰到一个问题。(不是太重要,强迫症发作一时忍不住了)。Android Studio 在layout文件夹下建立子文件夹:在说之前,我们可以在Android Studio 的res目录下 直接创建一个layout文件的。res/new /Android resource directory / recource type 下拉选择layout ,directory name 设置你选择的名称。但是...

weixin_35219482的博客 835

Kotlin开发Android应用入门:从环境搭建到Hello World

现代移动应用开发中,Kotlin因其简洁语法和强大特性已成为Android官方推荐语言。作为一种静态类型编程语言,Kotlin通过空安全机制、扩展函数等特性显著提升了代码质量与开发效率。在Android开发领域,Kotlin与Java的完美互操作性使其成为降低技术债务的理想选择。通过Android Studio这一官方IDE,开发者可以快速搭建包含Gradle构建系统的Kotlin项目。从环境配置到创建首个Activity,再到实现基础交互功能,这一完整流程展示了Kotlin在移动开发中的实际应用价值。特别

weixin_30642869的博客 361

7.Android学习之资源访问(二)

目录 7.资源访问(二) 4.布局资源(layout) 5.数组资源(array) 5-1.定义数组资源文件 5-2.使用数组资源 6.图像资源 6-1.Drawable资源 6-2.mipmap资源 7.资源访问(二) 4.布局资源(layout) 布局资源是Android 中最常用的一种资源。 在Android中,将布局资源文件放置在res\layout目录下,布局资源文件的根元素通常为各种布局管理器,在该布局管理器中,放置各种View组件或是嵌套的其他布局管理器。 布局文

ttycr的博客 2075

Kotlin Android开发入门:从环境搭建到Hello World

Kotlin作为Android官方开发语言,以其简洁语法和空安全特性显著提升了移动开发效率。现代Android开发环境通常基于Android Studio IDE,通过Gradle构建系统管理项目依赖。Kotlin与Java的完全互操作性使其成为Android开发的首选语言,特别适合实现MVVM架构和响应式编程。在移动应用开发场景中,从环境配置到第一个Hello World应用的创建,涉及SDK管理、布局设计和基础交互逻辑实现。本文以Kotlin Android开发为例,详解开发环境准备、项目创建流程和基础

weixin_34200628的博客 403

Android应用开发入门:编写你的第一个Hello World程序

在Android开发中,"Hello World"程序是入门级别的示例程序,用于展示如何创建一个简单的Android应用。接下来,打开"activity_main.xml"文件,它位于"app > res > layout > activity_main.xml"路径下。接下来,打开"activity_main.xml"文件,它位于"app > res > layout > activity_main.xml"路径下。现在,你已经编写好了"Hello World"程序的源代码。

PixelDyno的博客 1309

布局资源(layout)的简单使用

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 布局资源是Android中最常用的一种资源,Android可以将屏幕中组件的布局方式定义在一个XML中,这有点像Web开发中的HTML页面。我们可以调用Activity.setContentView()方法,将布局...

孤云博客 2454

Android基础教程:Hello, World!应用构建指南

Android是一种基于Linux内核的开源操作系统,专为移动设备设计。它提供了一个全面的开发平台,允许开发者使用Java、Kotlin等编程语言创建各种应用程序。Android应用广泛,从简单的计算器到复杂的游戏,几乎覆盖了所有类型的软件需求。Android Studio的用户界面布局直观易用,主要包括以下几个部分:工具栏(Toolbar):执行常见的操作,如运行、调试、构建等。菜单栏(Menu):提供详细的功能和设置选项。编辑区域:用于编写和编辑代码、布局文件等。

weixin_31569663的博客 806

零基础挑战用cursor开发一个安卓app——Hello World

按照教程,先新建个项目,然后选择一个空应用,选择“Empty Activity”,然而由于我用的AndroidStudio版本与教程中的不同,实际上我应该选的是“Empty Views Activity”,否则下一步设置工程名和路径的时候就会出现无法选java语言的问题。删除项目,重新选择为“Empty Views Activity”,草率的点击Finish后,紧接着就会发现,教程中要修改的“build.gradle”文件变成了“build.gradle.kts”,多了个后缀.kts。

weixin_45163575的博客 9706

Java入门:构建Android的Hello World应用程序

当您开始一个新的Android项目时,Android Studio提供了一个项目创建向导,以帮助您定义项目的结构。在这个向导中,您可以自定义许多项目相关的参数,例如应用程序名称、公司域名、保存项目的位置,以及选择您要使用的最低API级别。在“New Project”窗口中,您可以选择不同的项目模板。这些模板包括“Empty Activity”、“Navigation”或者“Bottom Navigation”等。这些模板已经预设了一些基础的布局和代码,但您可以根据自己的需求进行调整。

weixin_42309599的博客 1139

Android Studio中的Hello World入门实践指南

Android Studio是官方推荐的Android应用开发环境。它整合了Android SDK和模拟器,支持代码调试、性能分析及自动化测试。相比Eclipse,它提供了更为便捷的UI设计和构建配置功能,极大简化了应用开发和部署的流程。Java语言自从1995年被Sun Microsystems公司推出以来,已经发展成为世界上最流行的编程语言之一。

weixin_29069575的博客 1279

Android简明开发教程三:第一个应用Hello World

<br />在安装后Android开发环境和创建好Android模拟器之后,就可以开始写第一个Android应用“Hello,World”。后面的例子均采用Eclipse IDE。<br />安装ADT plugin之后,创建的新项目种类就会增加一个Android Project类型:<br /><br />选择Android Project项目类型,出现下面对话框:<br /><br />Project Name : Hello World<br />Build Target: 这里选择 Android

引路蜂移动软件 4801

Android Studio入门实战:Hello World应用开发完整流程

目录用于存放XML格式的UI布局文件。每个Activity通常对应一个布局文件,例如。这些文件采用声明式语法描述控件层级关系,支持多种布局容器,如等。<TextView和:定义控件尺寸。:引用中定义的字符串资源。:为控件生成唯一资源ID,供Java代码通过引用。该机制实现了视图与逻辑的分离,符合MVC设计思想。在标准的Android项目模板中,通常继承自类:@Override该声明体现了Java中类继承的基本语法结构:使用。

weixin_28713083的博客 1092

Android开发实例——Hello World

对于开发人员来说,最为直观的入手实例就是编写一个显示 Hello, world! 的程序并成功在目标平台上运行起来。所以写这个教程和广大android爱好者和开发人员分享一下。要实验android的开发,有几个基本的步骤:1. java运行库的安装。2. 开发工具的安装(eclipse是最为常用的,推荐Eclipse IDE for Java EE Developers (189 MB) 版本,因

不抛弃,不放弃 3万+

全国30米分辨率逐年植被覆盖度(FVC)数据集

植被覆盖度是描述地表植被的重要参数与生态环境的基本指标,在大气圈、土壤圈、水圈和生物圈中都占据着重要的地位,区域及全球范围的植被覆盖度估算对植被及相关领域的研究具有重要意义。往往参照《土壤侵蚀分类分级标准》,将植被覆盖度划分为4个等级:<30%为低覆盖度、30%—45%为中低覆盖度、45%—60%为中覆盖度、>60%为高覆盖度。本数据集包括1986至2022年间,全国植被覆盖度数据,FVC范围值为0-1,数据为浮点型,GeoTIFF格式。NDVImax 和NDVImin分别为区域内最大和最小的NDVI值。

地球资源数据云的官方博客 1966

一位海外开发者的 OpenSPG KAG 实践分享

KAG 是一个以创建和操作知识图谱为核心的框架。知识图谱是数据之间相互关联的可视化和结构化表示,对于搜索引擎、推荐系统和机器学习等应用至关重要。KAG 的目标是提供一个强大的平台,使开发者能够:轻松构建图谱;通过增强算法丰富数据;集成人工智能,以进行更精确的推理。通过理解 KAG,可以明显看出,这个框架旨在帮助从初学者到专业开发者,在项目中创造更优的解决方案。它在简便性和集成方面的优势,使其成为下一代基于数据的应用程序的前景工具。

金融机器智能社区 3405

Android 开发之旅:又见Hello World!

——量变产生质变,如果你从第一篇一直看到了这篇,可以说这就是你的质变点之一。 回顾及展望 经过数篇对Android应用程序的原理的讲述,现在我们大概回顾一下。 首先我们利用Hello World程序介绍了一个Android应用程序的目录结构,包括src文件夹、gen文件夹、Android x文件夹、assets文件夹、AndroidMainifest.xml、default.prope

吴秦 1745

Python语言在工业控制中的简单应用

在工业控制中,经常需要对采集到的数据进行分析和处理,Python的这些库可以简化这一过程。传统的工业控制系统多依赖于专用的控制硬件和软件,但随着技术的发展,开放性和灵活性成为了新的需求焦点。还有,Python社区活跃,提供了大量的开源代码和模块,这对于工业控制领域来说是一个巨大的资产。Python作为一种高级编程语言,因其简洁的语法、强大的库支持和广泛的社区资源而在工业界获得了快速的发展和广泛的应用。在工业控制领域,Python的应用日益增多,这得益于其跨平台性、脚本语言的灵活性以及与硬件设备交互的能力。

2303_78014702的博客 1721

第一个Android程序“Hello World”

详细介绍第一个Android程序 一、准备工作 这个我就不详细介绍了吧,如果没有准备好那么先请配置环境,下载平台吧。 Android Studio官网:https://developer.android.google.cn/studio/ JDK官网:https://www.oracle.com/technetwork/java/javase/downloads/index.html (记的设置J...

qq_41505643的博客 602

Ubuntu22.04下RTX2080显卡驱动、CUDA、cuDNN保姆级避坑安装指南(实测有效)

本文提供Ubuntu22.04下RTX2080显卡驱动、CUDA和cuDNN的详细安装指南,涵盖前期准备、驱动安装、CUDA版本选择、cuDNN配置及常见问题解决。通过实测有效的步骤和优化建议,帮助用户快速搭建稳定的深度学习环境,避免常见陷阱。

weixin_42540248的博客 285

OpenClaw实战五|企业文档AI助理:对接内部知识库+自动答疑+文档生成,员工自助查资料零等待

企业最大的隐性成本,不是设备、不是房租,而是内部知识的混乱与流失。OpenClaw企业文档AI助理,本质是给企业做了一个7×24小时在线、永不疲倦、精准无误、自动更新的内部知识管家。它不替代HR、行政、IT,而是把他们从无穷无尽的重复问答、机械文档编写里解放出来,去做更有价值的管理、服务、优化工作。对中小企业来说,不用买昂贵的知识库系统、不用招开发、不用做复杂集成,一台私有化服务器,两天就能落地,性价比拉满。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 144
上一篇: Android 开发之旅:view的几种布局方式及实践
下一篇: Android 开发之旅:短信的收发及在android模拟器之间实践(一)
xing...
博客等级 码龄17年 30粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值